2012-12-13 29 views
1

我有一個表添加一個新的預算細節,如下面的圖片:Knockoutjs複合物結合的組合選擇表

enter image description here

當我選擇一個收入賬戶,然後另一行添加到視圖模型集合:

enter image description here

我想設置爲「0.00」時添加的所有字段值的新行和一因此,我有一個問題,因爲如果我刪除一行,那麼組合的「更改」事件不存在,因此在更改最後一個組合時無法添加新行。

任何線索?這裏是小提琴工作樣本:http://jsfiddle.net/rLUyS/9/

下面是我用綁定的變化行動的最後添加的組合代碼:

$('select[name=cboincomeaccount_' + newRowIndex + ']').bind("change", { 
    combo: $(this) 
}, handler); 

function handler(event) { 

    newRowIndex++; 
    var combo = jQuery(this); 
    var row = combo.parent().parent(); 

    appViewModel.addRow(); 

    // Unbind 
    combo.unbind('change'); 
    // Bind new combo 
    jQuery('select[name=cboincomeaccount_' + newRowIndex + ']').bind("change", { 
     combo: jQuery(this) 
    }, handler) 

    jQuery(row).find('input[name^="txtincmonth"]').removeAttr('disabled');  
}; 

在此先感謝!

+1

任何不使用Knockout聲明式綁定change事件的理由?例如。 這樣它總是呈現並連線起來,並且在處理程序中,您可以根據它是新行還是更改行來應用邏輯。 –

+0

你的新行有空輸入的原因是因爲在你的addRow函數中,你正在執行'self.budgetDetails.push(新BudgetDetail(bDetails))',傳遞bDetails *數組*而不是裏面的對象。所以把這個bDetails改爲bDetails [0],對於這個例子 – antishok

+0

@TomHall你有沒有關於如何設置數據提示聲明的事件改變的示例? – VAAA

回答

0

這可能不是一個嚴重的淘汰問題,因爲它是一個用戶界面問題。

我想將所有的字段值「0.00」的時候,新的行添加

嗯,這是很容易做到。只需將可觀察行初始化爲全零即可。

當我選擇一個收入賬戶,然後另一行添加到視圖模型集合... 也是我有一個問題,因爲如果我刪除一行,然後犯規存在,所以有組合的「改變」事件在更改最後一個組合時無法添加新行。

這可能是一個可協商的要求。

爲什麼不創建一個'添加'按鈕,而不是堅持這個「漂亮」的行爲,當用戶在下拉列表中創建一個部分時添加一行?

此外,即使我們能夠完成您所要求的事情(並且我可以設想一種可以做到這一點的方式),當將用戶輸入保存到服務器時,您會做什麼?你計劃忽略最後一個空行嗎?

+0

是的,我認爲和添加按鈕可以更好地工作。你是對的!! – VAAA