2015-12-15 57 views
1

我有一個觀察的:lodash延長不延長淘汰賽觀察到

user.profile = { 
    name: ko.observable(); 
} 

我想另一個觀察的屬性添加到它:

_.extend(user.profile,{email:ko.observable('[email protected]')}); 

然後當我做user.profile()只顯示名稱屬性。

+0

'user.profile()'不會,因爲在所有'user.profile'不是一個函數或可觀察工作。 – Retsam

回答

1

看,也許你沒有看到修改becouse您正在使用JS對象的工作,你可能會試圖

_.extend(user.profile(), {email:ko.observable('[email protected]')}); 

得到你想要的結果而不是ko.observable,所以如果你在代碼片段中看到它的工作正常。

function viewModel(){ 
 
    var user= {} 
 
    user.profile = { 
 
    name:ko.observable("teste") 
 
    }; 
 
    this.profile = ko.observable(user.profile);  
 
}; 
 

 
viewModel.prototype.extend= function(){ 
 
    this.profile(_.extend(this.profile(),{email:ko.observable('[email protected]')})); 
 
}; 
 
ko.applyBindings(new viewModel());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script> 
 

 

 
<span data-bind="text:ko.toJSON(profile)"></span> 
 

 
<button data-bind="click: extend">Extend</button>

1

如果user.profile是可觀察到的,你的任務上面是一種誤導。這將是

user.profile({name: ko.observable()}); 

如果是這樣的話,這是有道理的,lodash不會按預期擴展它。它將增加一個成員給觀察者,而不是觀察者的內容。你將有user.profile.email。雖然我不知道這是什麼給你買了只

user.profile().email = ko.observable('[email protected]');