虽然我学习使用knockout js,但我已经从各种来源读取了将视图模型声明为对象文字和函数。一般来说,我得出的结论是宣称视图模型,因为函数是一个更好的选择(如果我错了,请纠正我)。
最近,我发现stackoverflow中的某个成员使用此方法来声明视图模型。虽然我不知道这种方法的用途,因为它没有在任何书籍或其他地方引入。希望有人可以澄清使用此比较对象文字和函数的好处。
var viewModel = (function () {
var obj = {};
obj.myVariable = ko.observable();
obj.myComputed = ko.computed(function () { return "hello" + obj.myVariable() });
ko.applyBindings(obj);
return obj;
})();
答案 0 :(得分:1)
这是为工作选择合适工具的问题。一些视图模型可能非常简单,因此可以定义为内联对象。我经常发现有能力定义辅助函数和私有变量,在这种情况下,我将使用你要求的立即执行的函数形式。
我很少需要创建viewmodel的多个实例。如果我这样做,我会使用一个返回viewmodel对象的命名函数。
制作相同形式的多个视图模型很少见,但是很少需要从它们继承,或者需要这么多实例,通过原型共享方法是一个重要的帮助。这些是唯一需要使用实际构造函数的情况。
答案 1 :(得分:0)
这不是将视图模型声明为函数。它声明一个匿名函数内联然后执行它,返回一个对象。它与声明对象内联相同,除了从函数返回对象。换句话说,这只是一种风格,并不是很重要。
但是,对于不同的样式(实际上将视图模型声明为函数),请参阅Difference between knockout View Models declared as object literals vs functions
这只是风格问题,真的。