2011-11-07 3 views
0

クリック時にオブジェクトを修正しようとしています。ここに私が持っているものがあります。クリック時にオブジェクトを変更する方法

<form> 
    <ul class="tabs" data-tabs="tabs" data-bind="template: 'lineTemplate'"></ul> 

    <div class="pill-content" data-bind="template: 'lineDivTemplate'" ></div> 
</form> 

<script id="lineTemplate" type="text/html"> 
    {{each(i, line) lines()}} 
    <li><a data-bind="click: function() { viewModel.setActive(line) }, attr : { href : '#line' + id() }"><span style="font-size: 15px;" data-bind="text : model"/></a></li> 
    {{/each}} 
</script> 


var viewModel = {  
    lines: ko.observableArray([]), 
    setActive : function(line) {     
     **//I need to modify this object** 

     line.activeTab = true; 
    } 
}; 

$.getJSON("/json/all/lines", { customer_id : customer_id } , function(data) {  

    ko.mapping.fromJS(data, null, viewModel.lines);  
}); 

ko.applyBindings(viewModel); 

基本的に、ユーザーがタブをクリックすると、現在アクティブなタブであるモデル(最終的にはデータベース)を更新する必要があります。私が持っていた最初の方法は、オブジェクトを削除してそれを配列に戻すことでしたが、pushを押して配列の最後に追加します。これは必要ありません。助けてくれてありがとう。

答えて

1

通常は、「selectedTab」や「activeTab」のような観測が可能です。

次に、activeTabに対して必要なバインディングを実行できます。 KO 1.3では、あなたが行うことができます:

<div data-bind="with: activeTab"> 
    ...add some bindings here 
</div> 

その前に、あなたは何ができる:これは良い作品が、私ははるかに簡単な何かを探しています

<script id="activeTmpl"> 
    ...add your bindings here 
</script> 
+0

。私がしたいのは、observableArray内のプロパティを変更することだけです。これは、オブジェクトに既にプロパティがある場合、データベースに情報を書き込むときに、これを簡単にします。あなたはそれを持っている方法私は完全に別のオブジェクトをシリアル化し、IDを取得し、それを別のPOSTとして渡して更新する必要があります。ありがとう。 –

+0

この場合の 'activeTab'は、observableArrayと同じ' line'オブジェクトへの参照に過ぎません。だから、まったく違うものではありません。 –

関連する問題