使用knockout.js时如何定义方法?

时间:2012-04-17 09:21:22

标签: javascript oop data-binding methods knockout.js

各种在线面向对象的JavaScript教程似乎建议使用传统的函数语法定义方法,例如:

function x(y) { ... }

相当于:

x = function (y) { ... }

我发现了一些差异 - 例如函数名称绑定的点。

我使用传统的函数语法定义了我的方法,但发现我无法在knockout.js中创建“submit”绑定。以下绑定不起作用:

 <form id="myForm" action="#" method="get" data-bind="submit: x">

报道:

Message: ReferenceError: x is not defined;

但是,当我使用非传统的“赋值”函数语法时,它

任何人都可以解释为什么我无法绑定到使用传统语法的方法吗?

如果有人知道对不同方法语法之间差异的全面讨论,那可能会有用。这是一个难以搜索的主题(至少当你不确定官方术语时)。

2 个答案:

答案 0 :(得分:0)

使用function x(y) { ... }x = function (y) { ... }

之间的javascript存在很大差异

特别是如果你在函数中定义this.x = function (y) { ... },你实际上在你的函数上创建了一个公共方法(OO术语中的类)。

答案 1 :(得分:0)

您的意思是您在View Model对象中编写了第一个变体,如下所示:

var ViewModel = { 
    function x(y) { ... }
}

在这种情况下,此函数不是View Model对象的“属性”,也不能通过knockout绑定。

但是如果你将它指定为对象的一部分,它可以绑定:

var ViewModel = { 
    x(y): function { ... }
}

据我所知,这两个变体之间没有区别,你可以在全局范围内定义一个函数(与任何JS对象无关)