function tournamentViewModel(){
var self= this;
self.name = ko.observable();
self.districts = ko.observableArray([new district('Provo',1),new district('Salt Lake City',2),new district('St. George',3)]);
self.district = ko.observableArray();
self.regions = ko.observableArray([new region('Utah',1),new region('Idaho',2)]);
self.region = ko.observableArray();
self.location = ko.observable();
self.date = ko.observable();
self.startTime = ko.observable();
self.image = ko.observable();
self.flyer = ko.computed(function(){return '<h1>'+self.name+'</h1>'+self.image},self);
self.clearImage = function(){
self.image('');
}
self.tournamentID = ko.computed(function(){return 't_'+self.district+'_'+self.region+'_'+self.date}, self);
};
除了我想将某些东西绑定(bind)到计算出的可观察到的
flyer
之外,上面的 knockout View 模型似乎还不错。相反,我看到的是以下文本:<h1>function c(){if(0<arguments.length){if(!c.equalityComparer||!c.equalityComparer(d,arguments[0]))c.I(),d=arguments[0],c.H();return this}a.U.La(c);return d}</h1>function c(){if(0<arguments.length){if(!c.equalityComparer||!c.equalityComparer(d,arguments[0]))c.I(),d=arguments[0],c.H();return this}a.U.La(c);return d}
我不知道这是怎么回事。下面是我将其应用于的绑定(bind)。我已经尝试了HTML和文本绑定(bind)。
<span data-bind="text: flyer"></span>
顺便说一句,计算得出的可观察到的
tournamentID
效果很好,语法似乎相同。我认为在可计算的可观察值中使用self.name
时会出现问题。有任何想法吗? 最佳答案
想一想。你得到了什么?您将获得函数定义。因为您将函数传递给computed
。并且您需要传递值。您应该使用:
self.flyer = ko.computed(function(){
return '<h1>'+self.name()+'</h1>'+self.image();
});
因为
name
和image
都是可观察到的(从JavaScript的 Angular 来看:函数)。我不确定
tournamentID
为什么为您工作。不应该这样顺便说一句,如果您使用的是
var self = this;
,则可以省略computed
的第二个参数。