在Knockout JS中使用揭示原型模式的计算观察对象
Computed Observables with Revealing Prototype Pattern in Knockout JS
我有一个使用揭示模块模式和原型的项目。这对于帮助我使用Knockout JS管理大量Javascript代码非常有用。对于标准的可观察对象和动作等来说,这是直接的。然而,当我已经来创建一个计算观察,我似乎不能得到它的工作。
我读了这篇文章:作为对象字面量声明的knockout视图模型与函数的区别
这似乎准确地描述了我想要的,因为我正在使用对象字面量。然而,我似乎不能正确地实现它。
下面是HTML:
<div data-bind="with: MyForm">
<p>First Name: <span data-bind="text: formValues.FirstName"></span></p>
<p>Last Name: <span data-bind="text: formValues.LastName"></span></p>
<p>Full Name: <span data-bind="text: formValues.FullName"></span></p>
</div>
下面是Javascript代码:
window.Test = window.Test || {};
Test.Main = function () {
this.viewModel = {};
this.setupViewModel();
return {
viewModel: this.viewModel
};
};
Test.Main.prototype.setupViewModel = function () {
var viewModel = function () {
var vm = this;
this.MyForm = {
formValues: {
FirstName: ko.observable("Joe"),
LastName: ko.observable("Bloggs")
}
}
};
/*
viewModel.MyForm.formValues.FullName = ko.computed(function() {
return this.FirstName() + " " + this.LastName();
}, vieModel.MyForm.formValues);
*/
this.viewModel = new viewModel();
ko.applyBindings(this.viewModel);
return this;
}
var mainApplication = new Test.Main();
我在下面创建了一个简单的JsFiddle来说明这段代码:http://jsfiddle.net/dontbesorry80/2Ltb790z/
我已经评论了我认为会是解决方案,因为它不起作用。任何帮助调整这个jsFiddle工作(正确显示全名)将非常感激。
这段代码似乎起作用了。
Test.Main.prototype.setupViewModel = function () {
var viewModel = function () {
var vm = this;
this.MyForm = {
formValues: {
FirstName: ko.observable("Joe"),
LastName: ko.observable("Bloggs")
}
}
};
this.viewModel = new viewModel();
this.viewModel.MyForm.formValues.FullName = ko.computed(function() {
return this.FirstName() + " " + this.LastName();
}, this.viewModel.MyForm.formValues);
ko.applyBindings(this.viewModel);
return this;
}
不是附加FullName属性到构造函数,你必须先创建viewModel,然后附加计算变量到它。
这个的使用对于在计算函数中获得适当的作用域是至关重要的。在引用的SO答案中,您可以看到完全相同的场景:
var viewModel = {
first: ko.observable("Bob"),
last: ko.observable("Smith"),
};
viewModel.full = ko.computed(function() {
return this.first() + " " + this.last();
}, viewModel);
First - viewModel是用First &最后一个属性,然后- property full被添加到viewModel对象。
相关文章:
- ES6 const,用于在JavaScript中创建对象原型;这是一种模式吗
- 为什么在原型中定义属性被视为反模式
- 在 Javascript 中从经典继承切换到原型继承:模式的改变
- jQuery插件使用揭示原型模式
- JS:原型模式兼容性
- 揭示原型模式私有变量
- 原型揭示模式和'这'嵌套函数或返回对象中
- 在带有敲除和杜兰达尔的揭示原型模式中对“这个”的混淆
- 如何将原型模式引入 javascript 命名空间
- 构造函数模式和原型模式之间的区别
- 显示原型模式不适用于 Array
- 原型模式(调用函数)
- Javascript-如何保存对“;这个“;用于使用原型模式在命名函数回调中进行访问
- Javascript装饰器模式-原型或单个函数
- 我使用什么JavaScript模式从原型方法访问私有方法
- JavaScript 中有没有办法在原型私有(使用模块 JS 模式)方法中提供对变量的访问
- 如何添加名称空间来显示原型模式
- 原型模式创建新属性
- Javascript原型模式-反馈
- 如何在原型继承模式中访问方法