2016-08-27 5 views
0

別のノックアウトビューモデルにデータを送信したいと思います。 たとえば、ユーザーはアイテムのリストを含むページに移動します。それからアイテムごとにリンクがあります。ユーザーがリンクをクリックすると、次のページに値などが表示されます。リスト項目の次のページが値として3 ..別のノックアウトモデルにデータを送信するにはどうすればいいですか?

I TREIDこれを持っています3.数であるが、

methods.initialize = function() { 
    var self = this; 
    self.setupSubscriptions(); 
    self.update(true); 
    Utils.ajaxPost('getMyOrganizations',{"data":""},function(result){ 
     result = JSON.parse(result); 
     if(_.isArray(result)){ 
      _.each(result,function(obj){ 
       self.organizations.push([obj["organization_name"],3,3,obj['id']]); 
      }); 
     } 
    }); 

}; 
methods.setupSubscriptions = function() { 
    var self = this; 
    self.update.syncWith('selectedOrg',true); 
}; 

と他のモデル、簡単の

methods.initialize = function() { 
    var self = this; 
    self.setupSubscriptions(); 
}; 
methods.setupSubscriptions = function() { 
    var self = this; 
    self.update.subscribeTo('selectedOrg', function(newUser){ 
     if(newUser){ 
      //Do the logic here 
      self.update = true; 
     } 
    }); 
}; 

答えて

1

一つの失敗メインビューモデル内に2番目のビューモデルの新しいインスタンスを観測可能な変数として作成し、ビューモデル間で簡単にやりとりすることができます。

以下は、使用できるロジックを示しています。

例:https://jsfiddle.net/kyr6w2x3/67/

HTML:

<ul data-bind="foreach:Items"> 
    <li> 
    <span data-bind="text:item"> 
    </span> 
    <a data-bind="click:$parent.LinkClicked,text:'ClickOnME'"> 

    </a> 
    </li> 
</ul> 
<div data-bind="text:MessageFromSecondVM"> 

</div> 
<hr> 
<div data-bind="with:SecondVM"> 
    <h3 data-bind="text:SecondVMVariable"> 
    </h3> 
</div> 

JS:

function FirstViewModel() { 
    var self = this; 
    self.SecondVM = ko.observable(); 
    self.FirstVMVariable = ko.observable(); 
    self.MessageFromSecondVM = ko.observable(); 
    self.Items = ko.observableArray([{item:"Item 1" ,value :1},{item:"Item 2" ,value :2},{item:"Item 3" ,value :3}]); 

    // you can create a new instance whenever you want in your model 
    self.SecondVM(new SecondViewModel()); 

    self.LinkClicked = function(item){ 
     self.SecondVM().SecondVMVariable("Value " + item.value + " sent to SecondVM From FirstVM"); 
    self.SecondVM().Value(item.value); 

    } 
} 
function SecondViewModel() { 
    var self = this; 
    self.SecondVMVariable = ko.observable(); 
    self.Value = ko.observable(); 
    self.Value.subscribe(function(newValue){ 
    if(newValue){ 
    FirstVM.MessageFromSecondVM("Value " + newValue + " was sent back from SecondVM here"); 
    } 
    }) 
} 
var FirstVM = new FirstViewModel() 
ko.applyBindings(FirstVM); 
関連する問題