Knockout JS html绑定返回奇怪的代码而不是html字符串

Fra*_*k B 4 javascript knockout.js

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);
};
Run Code Online (Sandbox Code Playgroud)

上面的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}
Run Code Online (Sandbox Code Playgroud)

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

<span data-bind="text: flyer"></span>
Run Code Online (Sandbox Code Playgroud)

BTW计算的observable tournamentID工作得很好,语法看起来很相似.我认为当我self.name在计算的observable中使用时会出现问题.有任何想法吗?

fre*_*ish 6

想一想.你得到了什么?你得到了函数定义.因为你把功能传递给了你computed.你需要传递价值观.你应该使用:

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

因为这两个nameimage是可观测量(从视图的JavaScript点:函数).

我不确定为什么tournamentID会为你工作.它不应该.

BTW如果您正在使用var self = this;,那么您可以省略第二个参数computed.

  • 谢谢你的回答.我总是想念一些愚蠢的东西.还要感谢您解释您的答案,而不仅仅是提供固定代码.拥有理论然后只是代码意味着更多. (3认同)