Javascript 击倒:在单个财产中可观察到的围栏
我的knockout视图模型变得相当大,我有几个可观察的函数和与属性Javascript 击倒:在单个财产中可观察到的围栏,javascript,mvvm,knockout.js,Javascript,Mvvm,Knockout.js,我的knockout视图模型变得相当大,我有几个可观察的函数和与属性BillingAddress相关的事件处理程序 例如,我有 self.BillingAddressEdit self.BillingAddressEditMode self.BillingAddressAddNew self.BillingAddressAddNewMode self.BillingAddresses self.BillingAddressesLoading …还有其他几个 我想做的是将这些集合到一个Billi
BillingAddress
相关的事件处理程序
例如,我有
self.BillingAddressEdit
self.BillingAddressEditMode
self.BillingAddressAddNew
self.BillingAddressAddNewMode
self.BillingAddresses
self.BillingAddressesLoading
…还有其他几个
我想做的是将这些集合到一个BillingAddress对象(或函数?)中,该对象具有与属性相同的可观察性
所以像这样的事情
self.BillingAddress = { // or possibly function() {
AddNew: ko.observable(),
AddNewMode: ko.observable(),
Addresses: ko.observableArray(),
Edit: ko.observable(),
EditMode: ko.observable(),
Loading: ko.observable()
}
然后在视图上访问这些,就像这样
<tagName data-bind="foreach: BillingAddress.Addresses">
</tagName>
为了实现这一点,在我现有的视图模型中,这个
BillingAddress
对象或函数将采用什么形式?在您的情况下BillingAddress
可以是单个对象。当您的子视图模型被多次使用时,该函数是有用的,例如在根模型中的observearray
更新:
self
变量用于记住viewModel的上下文。当您有一些回调时,它是有用的,这些回调可以有自己的上下文
在您的情况下,您的模型可以如下所示:
var BillingAddressViewModel = {
AddNew: ko.observable(),
AddNewMode: ko.observable(),
Addresses: ko.observableArray(),
Edit: ko.observable(),
EditMode: ko.observable(),
Loading: ko.observable()
}
function RootViewModel() {
var self = this;
self.BillingAddress = BillingAddressViewModel;
}
你能给我举个例子说明这是怎么写出来的吗?例如,我在问题中的例子是否正确?是否应该有
self.
为每个属性添加前缀?好的,我会尝试一下,并尽快报告。是的,效果很好。我不确定在我给出的例子中我做错了什么,但它现在起作用了。谢谢@Alexander。这个淘汰网站上的例子可能很有用:下面是相关的JSFIDLE,您可以对其进行分叉和修改,以将名称和子项更改为BillingAddress和Address