lodash延伸不延长淘汰观察

时间:2015-12-15 14:51:48

标签: knockout.js lodash

我有一个可观察的:

List<Class> myTypes = new ArrayList<>();

Reflections reflections = new Reflections("com.package");
for (String s : reflections.getStore().get(SubTypesScanner.class).values()) {
    myTypes.add(Class.forName(s));
}

我想为它添加另一个可观察的属性:

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

然后,当我_.extend(user.profile,{email:ko.observable('email@foo.com')}); 时,它只显示name属性。

2 个答案:

答案 0 :(得分:1)

如果user.profile.email是可观察的,则您的上述作业具有误导性。这将是

_.extend(user.profile(), {email:ko.observable('email@foo.com')});

如果是这种情况,那么lodash没有按预期扩展它是有意义的。它会将一个成员添加到observable中,而不是添加到observable的内容中。你会user.profile().email = ko.observable('email@foo.com'); 。您可以尝试

获得所需的结果
arena=350M

虽然我不确定这会为你买什么

fordblks=290M

答案 1 :(得分:1)

看,也许你没有看到修改因为你正在使用js对象而不是ko.observable,所以如果你在代码片段中看到它工作正常。

&#13;
&#13;
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@foo.com')}));
};
ko.applyBindings( new viewModel());
&#13;
<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>
&#13;
&#13;
&#13;