2012-03-15 5 views
1

У меня пару вопроса следующего кодаknockoutjs как отобразить вложенный наблюдаемый массив

  1. ли TokenList в PromoTemplate observableArray, что случилось с каждым элементом в массиве? они автоматически становятся обернутыми в наблюдаемые?

  2. Вся привязка, похоже, работает, я могу полностью дойти до значения токена, но когда я изменяю данные во входе, он, похоже, не уведомляет другие элементы управления, связанные с такое же свойство, например AttributeToken.Value.

    function AttributeToken(data) { 
        this.Identifier = ko.observable(data.Identifier) 
        this.DataType = ko.observable(data.DataType) 
        this.Value = ko.observable(data.Value); 
    } 
    
    function PromoTemplate(data) { 
        this.Identifier = ko.observable(data.Identifier); 
        this.Name = ko.observable(data.Name); 
        this.Content = ko.observable(data.Content); 
        this.TokenList = ko.observableArray(data.Tokens); 
        this.Sample; 
    } 
    
    function PromoTemplateViewModel() { 
        // Data 
        var self = this; 
        self.promoTemplates = ko.observableArray([]); 
    
    
        self.selectedPromoTemplate = ko.observable(); 
    
        // Init 
        $.getJSON(promoTemplatesUrl, function (allData) { 
         var mappedPromoTemplates = $.map(allData, function (item) { return new PromoTemplate(item) }); 
         self.promoTemplates(mappedPromoTemplates); 
        }); 
    
    } 
    

данные JSON выглядеть следующим образом

[{"Content":"<product><data price = \"100\" discountPercentage=\"{Percentage}\" startDate=\"{StartDate}\" ><\/data><\/product>","Description":null,"Identifier":"1","Name":"Percentage Promo","Tokens":[{"DataType":"double","Identifier":"{Percentage}","Value":"20"},{"DataType":"date","Identifier":"{StartDate}","Value":"10\/21\/2012"}]},{"Content":"<product><data price = \"250\" discountAmount=\"{DiscountAmount}\" startDate=\"{StartDate}\" ><\/data><\/product>","Description":null,"Identifier":"2","Name":"Dollar off Promo","Tokens":[{"DataType":"integer","Identifier":"{DiscountAmount}","Value":"5"},{"DataType":"date","Identifier":"{StartDate}","Value":"10\/21\/2012"}]}] 

ответ

2

observableArrays автоматически не делает все, что свойства элементов, которые они держат наблюдаемыми. Наблюдаемый массив будет уведомлять подписчиков только при манипулировании самим массивом (push, pop, slice и т. Д.) Или полностью заменить массив.

Таким образом, в вашем случае, вам нужно будет карта data.Tokens в AttributeToken экземпляров аналогичным образом, как вы отображение общих данных или посмотреть на использование что-то вроде mapping plugin.

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