2012-12-13 30 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