Javascript 在knockout.js中设置组合选项Text
我想在optionsText字段中组合两个返回值,我认为这很简单,但我显然错了。我还在“选项”字段中使用一个值,该值不在“正常视图”模型中。这是原件:Javascript 在knockout.js中设置组合选项Text,javascript,knockout.js,Javascript,Knockout.js,我想在optionsText字段中组合两个返回值,我认为这很简单,但我显然错了。我还在“选项”字段中使用一个值,该值不在“正常视图”模型中。这是原件: <select style="width: 180px" data-bind="visible: false, value: fields.person, options: $root.extra.personList, optionsText: 'FirstName', optionsValue: 'LastName' }, select
<select style="width: 180px" data-bind="visible: false, value: fields.person, options: $root.extra.personList, optionsText: 'FirstName', optionsValue: 'LastName' }, select2: {}">
这可以正常工作,显示此人的名字,并将值设置为LastName
下一部分抛出一个错误:
<select style="width: 180px" data-bind="visible: false, value: fields.person, options: $root.extra.personList, optionsText: function (item) { return item.FirstName() + '-' + item.LastName() }, optionsValue: 'LastName', select2: {}">
未捕获的TypeError:对象的属性“FirstName”不是函数您确定FirstName和LastName是可观察的吗?如果您不确定,请尝试以下方法:
optionsText: function(item) { return ko.unwrap(item.FirstName) + '-' + ko.unwrap(item.LastName); }
或者更好的方法是,在viewmodel中创建一个计算模型:
self.FullName = function() {
return ko.unwrap(self.FirstName) + '-' + ko.unwrap(self.LastName);
};
以及:
optionsText的工作原理是在绑定到的选项数组上查找属性“FirstName”。因此,如果额外的person数组具有“FirstName”和“LastName”,则可以扩展计算属性以保存全名
function ViewModel(){
var self = this;
self.peopleList = ko.observableArray();
}
function Person(f, l){
var self = this;
self.FirstName = ko.obserable(f);
self.LastName = ko.obserable(l);
self.FullName = ko.computed(function(){
return self.FirstName() + ' ' + self.LastName();
});
}
如果它们是不可观察的,您就不想调用它们[what(),does],在这种情况下,我只需要在视图模型上有一个函数,它将它们放在一起,您可以从绑定中调用它们 您确定
FirstName
和LastName
是可观察的吗?如果你不确定,试试这个:<代码> KOK。打开(item .FrestNeNT)+'++'Ko.un包装(item .LaSTNEX)< /Cord> >我不确定,我会尝试一下。在你开始把它添加到你的视图之前,考虑把那个函数移到你的视图模型中并调用它。这将导致代码更加清晰。@Jeffmerca这样做,并使其成为ko.computed
。谢谢sroes,我没有管理以前的模型,所以我不知道它们不可见。你能回答这个问题吗?我会记下来的。@ChrisNevill我知道你的评论已经发表了4个月了,但请注意,全名必须是选项的成员,而不是viewmodel。谢谢你。我想我最终一定想出了一个解决办法,但忘了回到这里。
function ViewModel(){
var self = this;
self.peopleList = ko.observableArray();
}
function Person(f, l){
var self = this;
self.FirstName = ko.obserable(f);
self.LastName = ko.obserable(l);
self.FullName = ko.computed(function(){
return self.FirstName() + ' ' + self.LastName();
});
}