我正在使用Knockout.JS进行代码质询。到目前为止,它非常整洁。
如果有人可以帮助我,我会就最佳做法提出一些简单的问题。我试图想象使用这个图书馆会是什么样的大规模,但这很困难。
在声明viewModel时,通常最好只在模型中声明observable声明并在以后使用效用函数吗?或者应该同时声明viewModel的整数函数吗?
所以这个:
var viewModel = {
newItemName: ko.observable(),
newItemPrice: ko.observable(0),
newItemQuantity: ko.observable(1)
};
viewModel.incrementUp = function() {
var value = this.quantity() + 1;
this.quantity(value);
};
// more functions here
ko.applyBindings(viewModel);
对。这个:
var viewModel = {
newItemName: ko.observable(),
newItemPrice: ko.observable(0),
newItemQuantity: ko.observable(1),
addNewItem: function () {
var newItem = {
name: capitalizeFirst(this.newItemName()),
price: this.newItemPrice(),
quantity: ko.observable(this.newItemQuantity())
};
}
};
viewModel.something = ko.computed(function() {
return 'do stuff'
});
ko.applyBindings(viewModel);
或者人们通常只是在之后添加计算值?我不知道人们是否会欣赏整体的viewModel文字或者是否应该如何处理它。我已经习惯了Angular的Angular方式'做任何事,哈哈。
抱歉这么迂腐。正如我所说,这是一个代码挑战,我想留下深刻的印象......而且我发现很难找到Knockout应用程序的例子。
谢谢!
答案 0 :(得分:1)
不使用任何选项,但小测试和重新编译之类的东西除外。有更好的选择。
PS。请注意,您的第二个示例甚至是错误,this
内的addNewItem
关键字将不引用视图模型!
基本问题的完整答案对Stack Overflow而言过于宽泛。基本问题是这样的:
如何在Javascript中使用适当的封装创建可重用的代码/ View模型?
意识到你提出了一个相当广泛的问题,并接受这样一个事实,即在你知道答案之前,你需要阅读/学习很多东西。我建议首先阅读Javascript中的prototypal(也称为“prototypical”)和经典继承,以及现代ECMA Script,Typescript等更现代的class
功能。
为了给你一个具体的提示,以便更容易地创建带有计算机的视图模型,这里有一个使用“构造函数”的例子,它可以在所有现代(和一些稍微更旧)的浏览器中工作,无需额外的库或转换步骤:< / p>
function ViewModel() {
// Keep a reference to the instance of the view
// model, becauese "this" itself might behave in
// unexpected ways within functions inside this
// view model constructor function.
var self = this;
self.firstName = ko.observable("john");
self.surname = ko.observable("doe");
self.fullname = ko.computed(function() {
return self.firstName() + " " + self.surname();
});
}
// Use it like this:
var johndoe = new ViewModel();
它利用the self=this
idiom以及构造函数(也是side-note recommendation in the KO docs)。
答案 1 :(得分:0)
这取决于具体情况。
对我来说,我喜欢保留与模型中的视图模型完全相关的任何内容,然后如果我需要为视图模型的特定用途添加特定功能,我可以稍后添加。
这意味着我可以创建一个可重复使用的模型/视图模型,并在需要时将其用于我的特定需求。