2014-07-22 32 views
2

我相當新的Knockout.js,但我已經成功地將幾個CRUD模板放在一起,與簡單的WebAPI服務交互。現在我想轉向更復雜的結構,並且我已經癱瘓了一個相當普遍的情況:單個html表單上的多個下拉列表。Knockout.js在一個視圖模型中綁定多個ObservableArrays的最佳實踐

我明白我可以建立一個ViewModel像這樣:

function myViewModel() { 
    var self = this; 

    self.selectedCustomer = ko.observable(); 
    self.customers = ko.observableArray([]); 

    self.selectedState = ko.observable(); 
    self.states = ko.observableArray([]); 

    self.selectedProduct = ko.observable(); 
    self.products = ko.observableArray([]); 
} 

然後我會每個選擇列表綁定到相應的屬性。雖然這應該起作用,但我覺得有更好的方法來處理它。我想過把每個列表分解成它自己的ViewModel,但這看起來像是過度殺傷。我希望儘早融入良好的MVVM習慣,並期待使用這些新技術重建舊系統,因此任何方向都會很棒。

回答

1

其實你正在尋找的是現在叫做Component的knockoutjs 3.2.0版本。爲了理解這一點,你可以看到knockoutjs的創始人Steve Anderson的演講。

Architecting large Single Page Applications with Knockout.js

此演示文稿告訴我們要創造出將基於兩件事情的組件。

  1. 視圖模型
  2. 模板

再就是使用它的兩種方式。

1.HTML標記方式。例如<name-editor></name-editor>
2使用組件綁定<div data-bind="component: 'name-editor'"></div>

有一點要記住的是,組件將是完全獨立的,只要你想,你可以調用組件的多個實例您的網頁上,並各自將獨立工作。

這裏有兩個教程將引導你走向正確的道路。

Knockout.js 3.2 Preview : Components

Dipping your feet into KnockoutJS Components

+0

這看起來像一個很好的路徑探索。所以在這種情況下,每個組件都可以作爲一個微型虛擬機,它包含每個組件的相關屬性。這可能會擴展(如果還沒有的話),以便爲選擇列表組件提供一個通用虛擬機,用於傳遞可觀察對象中的選擇列表組件,並且組件將它鏈接起來。謝謝! – termproto

相關問題