2013-02-11 2 views
1

Я пытаюсь разделить модели просмотра на несколько моделей с возможностью повторного использования. У меня есть одна модель просмотра, которая содержит несколько выпадающих списков и одну кнопку.Подписывание значениям из другой модели представления в нокауте js

var TopView = function() { 
     self.DropDownA = ko.observableArray(); 
     self.selectedDDA = ko.observable(); 
     self.DropDownB = ko.observableArray(); 
     self.selectedDDB = ko.observable(); 

     $.getJSON("someAPIurl", function (result) { 
      ko.mapping.fromJS(result, {}, self); 
     }); //this builds dropdownA 

     $self.selectedDDA.subscribe(function(newValue) { 
      $.getJSON("anotherAPI"+newValue, function (result) { 
       ko.mapping.fromJS(result, {}, self); 

      }); 
     }; // this builds dropdownB 
     $self.buttonClicked = function() { 
      alert("I clicked!"); 
     } 
} 

Мой главный ViewModel выглядит следующим образом:

var MainView = function() { 
    var self = this; 
    var topView = ko.observable({ TopView: new TopView() }); 

    // How do i get the selected values from topView once the user clicks the button??? 
} 

Как подписаться на DropDownA и DropDownB выбранные значения из моего MainView ??? Пожалуйста, помогите! Спасибо!

+0

Вы понимаете, что используете 'self' в конструкторе' TopView', не назначая его 'этому' заранее? –

ответ

1

Вам не нужно делать видимым TopView, если вы не хотите его обменивать. Вы можете просто создать его как свойство MainView и доступ к нему просто как то в ваших привязок:

<button data-bind="click:topView.buttonClicked">click me, I&#39;m a button!</button> 

Topview остаётся неизменным (после того, как вы зафиксировали ваше использование self и $self без определения их)

MainView будет выглядеть так:

var MainView = function() { 
    var self = this; 
    self.topView = new TopView(); 
} 

JSFiddle example

+0

чувак. Спасибо! – user1175857

 Смежные вопросы

  • Нет связанных вопросов^_^