4
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);
};

上面的 knockout.js 视图模型似乎很好,除非我想将某些东西绑定到计算的 observable flyer。相反,我看到的只是以下文本:

<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}

我不知道这里发生了什么。下面是我应用它的绑定。我已经尝试过 html 和文本绑定。

<span data-bind="text: flyer"></span>

顺便说一句,计算出的 observabletournamentID效果很好,语法似乎相同。我认为当我self.name在计算的 observable 中使用时会出现问题。有任何想法吗?

4

2 回答 2

6

想想看。你得到了什么?你得到了函数定义。因为你将函数传递给你的computed. 你需要传递。你应该使用:

self.flyer = ko.computed(function(){
    return '<h1>'+self.name()+'</h1>'+self.image();
});

因为两者nameimage都是可观察的(从 JavaScript 的角度来看:函数)。

我不确定为什么tournamentID对你有用。它不应该。

顺便说一句,如果您使用的是var self = this;,那么您可以省略 的第二个参数computed

于 2012-07-10T05:50:10.953 回答
4

尝试这个

<span data-bind="text: flyer()"></span>
于 2012-07-10T05:49:41.290 回答