试图绑定text
到视图模型之外的全局函数引发以下错误:绑定文本到全局函数
knockout.js:60 Uncaught ReferenceError: Unable to process binding "foreach: function(){return names }" Message: Unable to process binding "text: function(){return myFunction($data) }" Message: myFunction is not defined
HTML
<ul data-bind="foreach: names">
<li data-bind="text: myFunction($data)"></li>
</ul>
JS
function myFunction(text){
return text + '--';
}
function demoViewModel() {
self.names = ['a', 'b', 'c'];
return self;
}
var mm = new demoViewModel();
ko.applyBindings(mm);
相反,如果我延长String
对象,并以下列方式应用功能,它按预期工作:
<li data-bind="text: $data.myFunction()"></li>
扩展String对象:
String.prototype.myFunction = function(){
return this + '--';
}
这是为什么?将全局函数应用于text
绑定没有更好的方法吗?
与您的问题没有真正的关系,但请注意,您在demoVM上缺少'var self = this';您现在实际上使用全局[window.self](https://developer.mozilla.org/en-US/docs/Web/API/Window/self)对象作为您的虚拟机。 – Retsam
使用'window.myFunction'明确地将它添加到全局上下文应该可以,对吧? https://jsfiddle.net/2prmfwyx/看看knockout的'bindingContext'是如何工作的以及它通过'with($ data || {})'''with'关键字的内部使用' – user3297291