淘汰赛:单一财产中的围栏可观察物

时间:2014-02-18 10:39:42

标签: javascript mvvm knockout.js

我的淘汰视图模型变得相当大,我有几个与属性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对象或函数在我现有的视图模型中采用什么形式?

1 个答案:

答案 0 :(得分:1)

在您的情况下,BillingAddress可以是单个对象。当您的子视图模型多次使用时,该函数是有用的,例如在根模型中的observableArray

<强>更新

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;
}