2013-05-21 2 views
0

У меня есть сводный вид, который объединяет несколько видов в нокауте (как частичный вид, основной вид позволяет мне получать доступ к моделям просмотра независимо от страницы просмотра). Есть ли способ ссылаться на свойство в другом представлении в нокауте? У меня есть поле ввода, в котором я хочу запустить ajax-запрос в одной виртуальной машине, но мне также нужно, чтобы он запускал запрос в другой vm. Я знаю, что могу объединить их вместе внутри одной из виртуальных машин, но я не хочу явно ссылаться на отдельную виртуальную машину, если мне это не нужно.Модель перекрестного просмотра нокаута JS, связанная с

мастер вид имеет вид

function AggregateViewModel() { 
    var self = this; 
    self.vm1= new FirstViewModel(); 
    self.vm2= new SecondViewModel(); 
    self.vm3= new ThirdViewModel(); 

}

, и я хочу, чтобы связать вход, похожий на

<input data-bind="click: vm1.inputValue, click: vm2.inputValue"> 

, так что я могу стрелять как АЯКС события на то же самое щелкните событие.

спасибо за любую помощь/комментарии

+1

Возможный дубликат http://stackoverflow.com/questions/9761457/knockoutjs-multiple-bindings-on-click-event –

ответ

2

Вы не можете связывающиеся два обработчика щелчка, второй перезаписывает первый. Но вы можете объединить их на просмотре модели:

function AggregateViewModel() { 
    var self = this; 

    self.vm1 = { 
     handleClick: function() { 
      console.log('vm1'); 
     } 
    }; 

    self.vm2 = { 
     handleClick: function() { 
      console.log('vm2'); 
     } 
    }; 
    self.vm3 = {}; 

    self.handleClick = function() { 
     console.log('Wrapper'); 
     self.vm1.handleClick(); 
     self.vm2.handleClick(); 
    }; 
} 

И связываетесь с этой единственной функцией:

<input type="button" value="test" data-bind="click: handleClick" /> 

См JSFIDDLE, с консолью включена.

+0

Это правильное направление, и оно начинает затрагивать более широкий вопрос архитектуры приложения , в частности, как организовать концепцию поведения приложения. Если мы пересмотрим концепцию ViewModel, мы считаем ее агностикой представления, но все же специфичной для конкретного представления. Его область ответственности может быть ограничена действиями в качестве шлюза для остальной части логики в приложении. Я хотел бы рассмотреть использование архитектуры, ориентированной на обслуживание (или что-либо еще по вашему выбору), которая инкапсулирует большинство фактического поведения в приложении. Виртуальные машины просто обеспечивают доступ. –

+0

Это хорошо, но как добавить ввод, доступный для обоих методов? Поместить наблюдаемое в AggregateViewModel? каждая функция щелчка дескриптора принимает строку в качестве параметра, и эта строка выводится из одного поля ввода. –

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