2016-08-27 3 views
0

Я хочу отправить данные в другую модель с нокаутом. Например, пользователь переходит на страницу со списком элементов. Затем за элемент есть ссылка. Если пользователь щелкнет ссылку, на следующей странице будет указано значение. для элемента списка является номером 3. На следующей странице будет иметь 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

Один из простой пути - создать новый экземпляр вашей второй модели представления внутри вашей основной модели просмотра в качестве наблюдаемой переменной, а затем вы можете легко обмениваться данными между вашими моделями просмотров.

Ниже я просто покажу вам, какую логику вы можете использовать.

Пример: 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); 
Смежные вопросы