2013-03-15 28 views
0

我在看這個例子: http://knockoutjs.com/examples/contactsEditor.html使用的映射Knockout.js聯繫人編輯器實例

我需要得到同樣的例子與映射插件工作

我使用類似的東西,但更復雜數組,嵌套6層深。我很確定,如果我有這個例子,但使用映射插件,我會沒事的。


對於我猜測它的下面是沿着線的東西:

var initialData = [ 
    { firstName: "Danny", lastName: "LaRusso", phones: [ 
     { type: "Mobile", number: "(555) 121-2121" }, 
     { type: "Home", number: "(555) 123-4567"}] 
    }, 
    { firstName: "Sensei", lastName: "Miyagi", phones: [ 
     { type: "Mobile", number: "(555) 444-2222" }, 
     { type: "Home", number: "(555) 999-1212"}] 
    } 
]; 

var ContactsModel = function(contacts) { 
    var self = this; 

//我完全失去了這一點!?!? //

self.contacts = ko.mapping(contacts, function(contact) { 

     return { firstName: contact.firstName, lastName: contact.lastName, phones: ko.observableArray(contact.phones) }; 
    }); 

    self.addContact = function() { 
     self.contacts.push({ 
      firstName: "", 
      lastName: "", 
      phones: ko.observableArray() 
     }); 
    }; 

    self.removeContact = function(contact) { 
     self.contacts.remove(contact); 
    }; 

    self.addPhone = function(contact) { 
     contact.phones.push({ 
      type: "", 
      number: "" 
     }); 
    }; 

    self.removePhone = function(phone) { 
     $.each(self.contacts(), function() { this.phones.remove(phone) }) 
    }; 

    self.save = function() { 
     self.lastSavedJson(JSON.stringify(ko.toJS(self.contacts), null, 2)); 
    }; 

    self.lastSavedJson = ko.observable("") 
}; 

ko.applyBindings(new ContactsModel(initialData)); 

回答

0

嘗試:

self.contacts = ko.mapping.fromJS(contacts); 

您需要使用方法上的映射插件,而不是僅僅調用插件本身。

+0

謝謝!這很簡單,我已經打了好幾天了! – user1977907 2013-03-15 21:05:39

+0

別擔心,在那裏,做到了! :) – 2013-03-15 21:09:46