Knockout.js - 关于data-bind的javascript函数

Asd*_*dfg 19 asp.net knockout.js

有没有办法可以在数据绑定上调用JavaScript函数,如下所示:

<span id="lblSomePropVal" data-bind="text: MySomeFunction(SomeProperty())" ></span>
Run Code Online (Sandbox Code Playgroud)

我想要做的是使用我的viewmodel的SomeProperty值调用MySomeFunction.我的SomeFunction将根据传递的值返回一些文本,并将显示在span lblSomePropVal中.

我按照我在示例中编写的方式尝试了它,但它会抛出绑定错误.

我在这里遗漏了什么,还是有其他方法可以做到这一点?

这是我得到的错误:

Microsoft JScript runtime error: Unable to parse bindings.
Message: [object Error];
Bindings value: text: MySomeFunction(SomeProperty())
Run Code Online (Sandbox Code Playgroud)

Pro*_*rod 13

我在尝试计算表格单元格条目时遇到了类似的问题.对我有用的是在我的数据模型中包含'MySomeFunction',然后将我的表格单元格数据绑定为:

<td data-bind="text: $root.MySomeFunction(SomeProperty)"></td>
Run Code Online (Sandbox Code Playgroud)

  • 如果你仍然遇到麻烦,请尝试`<td data-bind ="text:console.log($ root)"> </ td>`以确保$ root具有您期望的属性. (3认同)

Rom*_*aev 12

您可以使用任意JavaScript表达式进行绑定,但请记住,它们是在viewmodel的上下文中计算的,因此表达式中的所有函数都必须是viewmodel的属性.在您的情况下,MySomeFunction必须是您的viewmodel的属性.如果使用映射插件创建viewmodel,则可以将其他函数附加到viewmodel,如下所示:

var viewModel = ko.mapping.fromJS(data.d)
viewModel.MySomeFunction = function(...){...};
Run Code Online (Sandbox Code Playgroud)


Pet*_*ter 5

好吧,我只是自己编写教程,但我认为你必须设置一个属性并使用ko.computed给它它的值(来自教程):

function AppViewModel() {
this.firstName = ko.observable("Bert");
this.lastName = ko.observable("Bertington");
this.fullName = ko.computed(function(){ 
  return this.firstName() + " " + this.lastName(); 
  },this);
}
Run Code Online (Sandbox Code Playgroud)

然后你可以:

Full name: <strong data-bind="text: fullName"></strong>
Run Code Online (Sandbox Code Playgroud)