我正在使用ko.mapping.fromJS(數據,映射)方法從服務器翻譯我的模型,以便我可以添加更多屬性到我的子模型。在knockoutjs中自定義對象「create」 - 屬性綁定對加載起作用,但在創建新對象時不起作用
以下這裏的例子: http://knockoutjs.com/documentation/plugins-mapping.html =>創建‘
這裏是我的代碼「使用自定義對象的構造’:
var Employer = function (data) {
ko.mapping.fromJS(data,{}, this);
this.Foo = ko.observable("bar"); // added properties will go here.
console.log(this.Foo()); // i see this getting called OK on initial creation, and subsequent creations
console.log(this.Name()); // ** this is only OK during initial creation, but on subsequent times i get "[Object] does not have a property Name" this property comes from the server model..**
};
var mapping = {
'Employers' : {
create: function (options) {
var e = new Employer(options.data);
return e;
}
}
};
model = ko.mapping.fromJS(data, mapping);
至今工作正常
的問題發生這裏:
model.addEmployer = function (options, o2) {
var e = new Employer(options);
this.Resume.Employers.push(e);
};
我在這裏丟失了一些東西..當我想向集合中添加一個新對象時,它缺少來自模型(來自服務器)的所有屬性,這些屬性是用這行添加的「ko.mapping.fromJS數據,{},this); 「僱主構造函數中
我猜測我需要重複addEmployer功能,將重新綁定所有的服務器端屬性的客戶端模型
這裏是如何我打電話addEmployer裏面的一些類似的映射:
<button data-bind="click: addEmployer">...</button>
UPDATE
什麼把它歸結爲,是在映射聲明 '創建' 事件時,該功能接收OPTIO ns object,其中有options.data可用於此調用:ko.mapping.fromJS(data,{},this); ..我不知道如何在我的addEmployer處理程序中獲得這種類型的對象,以便爲服務器上的Employer對象上存在的所有屬性提供必要的綁定。
我可以通過從初始綁定中保留options.data來破解它,並在addEmployer處理程序中重新使用它。問題在於它是否具有從該初始對象設置的所有屬性。
我基本需要的是EmployerMappingOptions對象,它是空的。在上面的實現中,options.data預先填充了我集合中第一個Employer對象的數據。 我如何獲得空僱主模型的映射數據?
這是正確的,你逝去的_this_作爲目的地的addEmployer方法中的映射轉換?也許你想將數據加載到新僱主_e_中? – Grim 2013-02-17 22:55:59
@Grim是的,我已經嘗試了一些方法在這裏..我會用它更新我的問題。 – 2013-02-18 01:09:19
爲什麼你先映射兩次,在構造函數中,然後再返回時? – Anders 2013-02-18 08:03:30