【发布时间】:2016-10-11 12:42:04
【问题描述】:
尝试将text 绑定到视图模型外部的全局函数会引发以下错误:
knockout.js:60 Uncaught ReferenceError: Unable to process binding "foreach: function (){return names }" 消息:无法处理绑定“文本:函数(){return myFunction($data)}” 消息:myFunction 未定义
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.prototype.myFunction = function(){
return this + '--';
}
这是为什么?难道没有更好的方法将全局函数应用于text 绑定吗?
【问题讨论】:
-
与您的问题没有太大关系,但请注意您的 demoVM 上缺少
var self = this;您现在实际上正在使用全局 window.self 对象作为您的虚拟机。 -
使用
window.myFunction将其显式添加到全局上下文中应该可行,对吧? jsfiddle.net/2prmfwyx 看看淘汰赛的bindingContext是如何工作的,以及通过with($data || {})对with关键字的内部使用@
标签: knockout.js knockout-3.0 knockout-3.2