試圖綁定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