2013-04-17 45 views
0

knockout.js是否支持綁定bettwen html元素而沒有viewmodel,就像Silverlight/Wpf元素綁定一樣?knockout.js是否支持html元素之間的綁定?

例如: 我有一個表單,我想基於一個字段的值(複選框)顯示/隱藏字段。

是否有一個簡單的方法,使用knockout或使用純javascript工作會更直接?

我試圖實現一個基於數據屬性的可重用方式,但它開始變得繁瑣,我開始想知道如果淘汰賽是要使它可重用的方式。

+1

我不認爲淘汰賽支持HTML元素之間的綁定。即使它做到了,你也應該在js中創建一個基礎的observable,然後綁定你的html元素。我正在給這個問題+1,以抵消一些給它的downvote。不完全是一個無理的問題。 – morpheus

+0

我在Silverlight和WPF中有一些背景,因此有了MVVM開發,但我現在開始在HTML/JS中開發。我還沒有開始使用淘汰賽,只是玩了一下。在這個特殊情況下,我偶然發現了這種形式,並且正如我想象的那樣,我會在另一個頁面中再次發現這種情況,我想知道淘汰賽是否會支持XAML所做的一些功能。我無法在文檔中找到有關該案例的信息,所以我在這裏提問。 –

回答

1

你不能做到這一點沒有一個ViewModel,但你可以使用計算變量做到這一點:

//In your view model 
this.showFormElement = ko.computed(function(){ 
    if(this.checkboxValueiswhatIwant()){ 
     return true; 
    } 
    return false; 
}, this); 

然後在你的HTML:

<form [id, classes, etc..]> 
    <input type="checkbox" data-bind="checked: checkboxValueiswhatIwant" /> 
    <input type="input" data-bind="visible: showFormElement" /> 
</form> 

出於好奇心你如何使用淘汰賽沒有視圖模型?

如果你以某種方式使用它,爲什麼?

+0

我不是。我目前的方法包括純js,通過id搜索字段並訂閱onchange事件。 –

+0

好吧,我假設你正在使用淘汰賽......這是它的基礎上,這更新了基於事件的用戶界面的東西。如果你確實使用它,我在那裏給你的代碼將會起作用。 – jefffan24

+0

你在技術上不需要計算。只需將'checked'綁定添加到複選框,並將該可見項用於另一個元素上的'visible'綁定。 –