2014-02-04 4 views
0

Я перекручивание через массив и отображения его содержимого через композициюDurandal состав Еогеасп

<!-- ko foreach: { data: datas} --> 
    <div> 
      <!-- ko compose: { 
       model: 'show', 
       activationData: { 
        bundle:bundle 
       },      
       } --> 
      <!-- /ko --> 
    </div> 
<!-- /ko --> 

композиция называет модель show.js, которая принимает пакет activationData оборачивает его в наблюдаемой и отобразить его в таблица

function (logger, utils) { 
    var bundle = ko.observable(); 

    var activate = function (data) { 
     // process data.bundle further 
     bundle(populateBundle(data.bundle)); 
    }; 
} 

show.html

<table class="table table-bordered"> 
    <tbody>   
     <!-- ko foreach: {data:bundle().groups, as:'group'} --> 
     <tr> 
      <td class="tolerances-values" align="center"><span data-bind="text: group.name"></span></td> 
      <td class="tolerances-values" align="center"><span data-bind="text: group.code"></span></td> 

     </tr> 
     <!-- /ko --> 
    </tbody> 
</table> 

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

ответ

2

Причина в том, что вы не используете функцию конструктора внутри вашей модели представления. Вам нужно создать объект и прикрепить вещи, например, активировать его прототип вместо того, как вы это делаете. Проверьте здесь для примера - http://durandaljs.com/documentation/Using-Composition.html

Вот еще один пример из сообщения коробчатых документов -

var MessageBox = function(message, title, options) { 
    this.message = message; 
    this.title = title || MessageBox.defaultTitle; 
    this.options = options || MessageBox.defaultOptions; 
}; 

MessageBox.prototype.selectOption = function (dialogResult) { 
    dialog.close(this, dialogResult); 
}; 
Смежные вопросы