2011-07-13 19 views
2

在Knockoutjs上的Twitter Client示例中,某些属性位于JSON对象中,而其他属性位于JSON变量之外。有什么不同?为什么方法(findSavedList)不能成为初始声明的一部分?JSON表示法和赋值给对象有什么区别?

var viewModel = { 
    savedLists: ko.observableArray([ ... ]), 
    editingList: { ... }, 
    userNameToAdd : ko.observable(""), 
    currentTweets : ko.observableArray([]) 
}; 

viewModel.findSavedList = function (name) { 
    ... 
}; 
+0

您的viewModel不是JSON对象。 – epascarello

+3

这不是JSON。请参阅http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/ – James

+0

感谢您解决这个问题。那么viewModel只是一个对象文字? –

回答

1

只是从问题的代码,我看不出它不可能一直这样写,所以任何的理由:

var viewModel = { 
    savedLists: ko.observableArray([ ... ]), 
    editingList: { ... }, 
    userNameToAdd : ko.observable(""), 
    currentTweets : ko.observableArray([]), 
    findSavedList: function (name) { 
     ... 
    } 
}; 

望着actual example,我认为他们只是想为了便于阅读,分别编写函数—?

1

没有理由,方法不能;它的风格。

1

你引用的东西都不是JSON。 JSON是数据交换的文本符号。你引用的是JavaScript代码。

要回答你的问题,没有任何理由,该功能已经不能对象文字中定义:

var viewModel = { 
    savedLists: ko.observableArray([ ... ]), 
    editingList: { ... }, 
    userNameToAdd : ko.observable(""), 
    currentTweets : ko.observableArray([]), 
    findSavedList: function(name) { 
     ... 
    } 
}; 

的作者可能他们打散了清晰度。


关于我上面的JSON注释:JSON是JavaScript文字表示法的一个子集。以上是直接的JavaScript文字符号。 JavaScript代码中永远不需要JSON;当你以文本形式编码时,你只需要JSON。如果它意思是JSON,那将是无效的。在JSON中,属性名称(键)必须用双引号引起来,并且在属性初始值设定项的右侧不能有表达式(因此,不需要调用ko.observeableArray)。更多关于JSON site

+0

添加您的意见:JSON也不能包含功能。 –

+1

@Matt:那么,那些将是表达式。 :-)但仍值得大声呼喊。 –

相关问题