2016-07-10 7 views
0

я в основном имею наблюдаемый массив в моем ViewModelОбновления родительскога выколотка элементы наблюдаемого массив, когда один из наблюдаемого внутри массива изменяет

self.details=ko.observableArray([]); 

который содержит массив модели - DetailModel, который имеет isChecked свойство как наблюдаемые.

Я хочу подписаться на изменения isChecked и удалить все остальные флажки.

for(var i=0;i<10;++i) 
{ 
    var detail=new DetailModel(i); 

    detailList.push(detail); 
    detail.isChecked.subscribe(function(checkBoxCheckedState){ 

    if(checkBoxCheckedState==true) 
    { 
     /* Idea is to untick all other checkboxes if one is checked */ 
     console.log(detail); 
     console.log(detailList); 
     ko.utils.arrayFilter(self.details(), function(detailRow) { 
      if(detailRow.id!=detail.id) 
      { 
       detailRow.isChecked(false); 
      } 
     }); 
    } 
}); 

Я инициализирует данные массива внутри цикла и прикрепления подписываться там, из-за закрытия, только последний объект деталь доступен внутри функции подписки.

Как я могу достичь того же, не передавая обратный вызов родительской/родительской модели в модели дочернего вида?

https://jsfiddle.net/7srbxu5y/17/

ответ

1

вам действительно нужно в модели подробно isChecked ли? Не могли бы вы использовать только одно свойство selected в родительской модели? В этом случае вашим дочерним моделям не нужно было бы ничего знать о родительской модели. Смотрите образец кода

function DetailModel(name) { 
    this.name = name; 
} 

function ViewModel(items) { 
    this.items = ko.observableArray(items);  
    this.selected = ko.observable(); 
} 

ViewModel.prototype.select = function select(data) { 
    var selected = this.selected.peek(); 
    if (selected !== data) { 
     this.selected(data); 
    } else { 
     this.selected(null); 
    } 
    return true; 
} 

Working fiddle

+0

я думал об этом, возможно, спасибо. Как мы можем сделать это так, чтобы подписка могла работать внутри цикла? Я знаю, что это связано с закрытием. Есть предположения? Я хотел бы попробовать это, чтобы понять –