0

在浏览 KnockoutJS 的示例时,我看到了以下代码

function WebmailViewModel() {
    // Data
    var self = this;
    self.folders = ['Inbox', 'Archive', 'Sent', 'Spam'];
    self.chosenFolderId = ko.observable();

    // Behaviours    
    self.goToFolder = function(folder) { self.chosenFolderId(folder); };    
};

ko.applyBindings(new WebmailViewModel());

我不是 Javascript 专家,但对用法有点困惑self.chosenFolderId(folder);

ko.observable();selectedFolderId 是一个属性,并根据使用其他语言的经验分配,

  1. 如何通过传递一个参数来调用它self.chosenFolderId(folder);
  2. 文件夹定义在哪里?

如果你能指出一篇解释这一点的文章就行了。

谢谢。

4

3 回答 3

1

chosenFolderId是一个属性,但属性可能是函数(在这种情况下必须是函数)。

所以ko.observable返回一个接受单个参数(文件夹)的函数。

这与下一行没有什么不同:

self.goToFolder = function(folder) { ... };

goToFolder属性设置为函数的位置。

folder本身被“定义”为作为参数goToFolder的参数。无论调用 goToFolder什么都为folder.

于 2012-05-30T18:38:58.280 回答
0

javascript 中的函数是一流的对象。ko.observable()是一个函数调用,它的返回值本身就是一个函数。

基本上我可以做这样的事情:

var observable = function(some_param) {
  return function(some_other_param) {
    // do something useful here
  }
}

然后我可以打电话:

observable(1)(2);
于 2012-05-30T18:38:51.227 回答
0

在 javascript 中,函数可以分配给变量,作为参数传递给函数,从函数返回等等。换句话说,the'yre First-class

于 2012-05-30T18:39:08.143 回答