2012-12-18 82 views
0

Im使用Knockout JavaScript庫v2.2.0rc。淘汰收音機組裏面的foreach綁定工作只有一種方式

我想知道,是否有可能做到以下幾點。

我的模板看起來像這樣

<script type="text/html" id="@Html.UniqueId("WorkflowRulesDisplay_template")"> 
<div data-bind ="foreach: items"> 
    <fieldset> 
     <legend> 
      <span data-bind="text: StName"/> 
     </legend> 
     <dl class="row"> 
      <dt class="label"> 
       <label>Member Type:</label> 
      </dt> 
      <dd class="field"> 
       <div><input type="radio" value = "User" data-bind="attr :{name:'@Html.UniqueId("wf_usr_radio_grp_")' + StId, checked: CheckedUsr}"/>User</div> 
       <div><input type="radio" value = "Group" data-bind="attr :{name:'@Html.UniqueId("wf_usr_radio_grp_")' + StId, checked: CheckedGrp}" />Group</div> 
      </dd> 
     </dl> 
     <dl class="row"> 
      <dt class="label"> 
       <label>Description:</label> 
      </dt> 
      <dd class="field"> 
       <textarea rows ="5" cols="20" class ="textbox simple-text" data-bind="value: Description"></textarea> 
      </dd> 
     </dl> 
    </fieldset> 
</div> 

我的視圖模型和初始化代碼如下所示:

this._items = ko.observableArray(workflow.data('workflow_list_data')); 
var viewModel = { items: this._items}; 
ko.applyBindingsToNode(this._containerElem.get(0), { template: { name:workflow.attr('id').replace('_workflow_control', '_template') } }, viewModel); 

其中workflow.data( 'workflow_list_data')是

data.Select(x => new { StName = x.StatusType != null ? x.StatusType.Name : string.Empty, StId = x.SuccessorStatusId, CheckedGrp = !x.GroupId.HasValue, CheckedUsr = !x.UserId.HasValue, x.UserId, x.GroupId, x.Description }); 

,所以在客戶端,我有這個:[Object {StName =「lala」,StId = 123,CheckedGrp = false,CheckedUsr = true,Description =「lala」} .... {...}]

這一切都很好,但廣播組。更改所選按鈕不會更改視圖模型。我試過檢查和attr值綁定 - 都一樣。

+0

屬性是你的workflow_list_data在傳遞到客戶端爲JSON? – Alex

+0

是的,它的JSON,它剛剛放入數據屬性中,我不知道,我是否可以將其稱爲HTML屬性,但是我使用jQuery數據函數來讀取它,所以,我猜,它清晰,我是什麼談論。 – inlines

+0

看到我的答案.. – Alex

回答

0

問題是CheckedUsrCheckedGroup不是可觀察的。
而不是

this._items = ko.observableArray(workflow.data('workflow_list_data')); 

嘗試

this._items = ko.mapping.fromJS(workflow.data); 
// not sure what worflow.data is at this point? 

這應該創建一個從您的數據observableArray,設置爲ko.observable