Asp.net Knockout.js-数据绑定上的javascript函数

Asp.net Knockout.js-数据绑定上的javascript函数,asp.net,knockout.js,Asp.net,Knockout.js,有没有一种方法可以在数据绑定上调用JavaScript函数,如下所示: <span id="lblSomePropVal" data-bind="text: MySomeFunction(SomeProperty())" ></span> var viewModel = ko.mapping.fromJS(data.d) viewModel.MySomeFunction = function(...){...}; 我自己也在学习教程,但我认为您必须设置一个属性并使用k

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

<span id="lblSomePropVal" data-bind="text: MySomeFunction(SomeProperty())" ></span>
var viewModel = ko.mapping.fromJS(data.d)
viewModel.MySomeFunction = function(...){...};

我自己也在学习教程,但我认为您必须设置一个属性并使用ko.computed为其赋值(来自教程):

然后你可以有:

Full name: <strong data-bind="text: fullName"></strong>
全名:

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

<span id="lblSomePropVal" data-bind="text: MySomeFunction(SomeProperty())" ></span>
var viewModel = ko.mapping.fromJS(data.d)
viewModel.MySomeFunction = function(...){...};

我在计算表格单元格条目时遇到了类似的问题。对我有效的方法是在我的数据模型中包含“MySomeFunction”,然后将我的表单元格绑定为:

<td data-bind="text: $root.MySomeFunction(SomeProperty)"></td>

我通过使用上下文成功地做到了这一点。如果你需要完整的代码,我可以寄给你

<h2 class="text" data-bind="html: currentProgram($context)"></h2>

function currentProgram(context){
  var title = '<font size="1">' + context.$data.name + '</font>';
  return title;
}

函数trimString(值,maxLen){
//返回未定义的字符串和短字符串
如果(值===未定义)返回未定义;
if(value.length
我知道这是可以做到的,但我想知道我是否可以在binding属性中调用JS函数,这样我就不必编写大量的JS代码来操作这里的每个propertyPeter了。您只需在viewmodel中构建函数,它就会工作。例如,如果MySomeFunction在上面的AppViewModel中,您可以很好地调用它。此外,您可以在数据绑定中使用基本的javascript内容,如
.toUpperCase()
,我认为这不起作用,因为我的函数在viewmodel之外。我使用敲除映射器来声明我的视图模型(var viewmodel=ko.mapping.fromJS(data.d);)。如何将函数附加到下面的viewmodel?您可以在视图模型之外调用另一个函数,只需使用函数名,如:this.fullname=ko.computed(您好,this);如果你在其他地方有一个名为hello的函数,它就会工作。不过我不确定是否使用参数。请尝试使用
data bind=“text:MySomeFunction.bind(SomeProperty())”
很抱歉打扰您,但我一直得到
MySomeFunction
未定义?使用此方法时,我也一直得到“未定义”。必须完全限定它,否则无法看到它。。。假设它在库或模块中,我也很难让它工作,然后我想起了绑定上下文。我使用的是foreach绑定,因此为了访问视图模型上的函数,我必须使用$root.functionName,而不仅仅是functionName。如果您仍然有问题,请尝试
以确保$root具有您期望的属性。
       $.ajaxSetup({
          async: false
        });
<div style="font-size:18px;float:left;width:95%" data-bind="html: trimString(AccountName,25)"></div>

function trimString(value, maxLen) {

    //Return undefined, and short strings
    if (value === undefined) return undefined;
    if (value.length < maxLen) return value;

    return value.substring(0, (maxLen - 1));    
}