2013-10-07 25 views
2

當我嘗試添加一個新的項目到我的數組時,我似乎無法得到Knockout映射插件執行「創建」方法(項目)。 它似乎從json初始創建時執行,但不是添加新的項目。如何添加一個新的匿名項目使用挖空映射插件

這裏是一個非常簡單的jsFiddle

注:我已經看了similar questions,但他們說我沒有所有參考靜態對象。

Inital JSON

var json = {  
    "Items": [{ 
     "ItemID": 1, 
     "ItemDate": "2000-01-02T00:00:00Z", 
     "Amount": 50 
    },{ 
     "ItemID": 2, 
     "ItemDate": "2000-01-02T00:00:00Z", 
     "Amount": 100 
    }] 
}; 

映射選項

var mappingOptions = {  
    "Items": { 
    create: function (mappingoptions) { 
     var data = mappingoptions.data; 

     data = data || { 
      "ItemID": ko.observable(0),       
      "ItemDate": ko.observable(currentDate),       
      "Amount": ko.observable(new Date()) 
     }; 

     var result = ko.mapping.fromJS(data);          
     return result;    
    } 
    } 
}; 

視圖模型(帶Add方法)

MyApp.Batch.ViewModel = function (jsonBatch) { 
    //Works Great 
    var model = ko.mapping.fromJS(jsonBatch, mappingOptions); 

    //Doesn't Work 
    model.addItem = function() {   
    // TRYING TO ADD a new Empty Item USING THE AUTO MAPPER   
    var newItem; 
    model.Items.push(ko.mapping.fromJS(newItem, mappingOptions))   
    };  

    return model; 
}; 

回答

2

映射插件的目標(顧名思義)是在對象圖之間映射,而不是爲了拉伸創建新對象。因此,它並沒有提供這可以幫助你在這種情況下,使用任何功能...

但是你Items創建功能已經與空項目情況涉及這樣你就可以直接調用這個函數在你addItem方法:

model.addItem = function() { 
    model.Items.push(mappingOptions.Items.create({})); 
}; 

演示JSFIddle

相關問題