【问题标题】:Knockoutjs complex binding combo select tableKnockoutjs 复杂绑定组合选择表
【发布时间】:2012-11-30 20:35:11
【问题描述】:

我有一个用于添加新预算详细信息的表格,如下图所示:

当我选择一个收入帐户时,视图模型集合中会添加另一行:

我想在添加新行时将所有字段值设置为“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');    
};

提前致谢!!

【问题讨论】:

  • 有什么理由不使用 Knockout 以声明方式绑定更改事件?例如。 这样它总是存在并连接起来,并且在处理程序中,您可以根据它是新行还是更改行来应用逻辑.
  • 你的新行有空输入的原因是因为在你的 addRow 函数中,你正在做self.budgetDetails.push(new BudgetDetail(bDetails)),传递 bDetails array 而不是里面的对象。所以将 bDetails 更改为 bDetails[0],在这个例子中
  • @TomHall 你有任何关于如何在 databint 声明中设置事件更改的示例吗?
  • 您知道如何计算总数,以便将所有 1、2、3、4 等连续相加吗?谢谢
  • @VAAA 绑定类似于: (为了清楚起见省略了选项等)和视图上的处理程序模型就像: self.changeIt = function(data, event) { ... });其中 data 是当前的数据绑定上下文。或者,您可以将选定的值设置为可观察的值,例如 knockoutjs.com/examples/controlTypes.html,然后订阅它而不是使用更改处理程序。

标签: javascript json knockout.js knockout-2.0


【解决方案1】:

这可能不是敲除问题,而是用户界面问题。

我想在添加新行时将所有字段值设置为“0.00”

嗯,这很容易。只需将 observable 行初始化为全零。

当我选择一个收入帐户时,视图模型集合中会添加另一行... 而且我还有一个问题,因为如果我删除一行,那么组合的“更改”事件不存在,因此在更改最后一个组合时无法添加新行。

这可能是一个可以协商的要求。

为什么不创建一个“添加”按钮,而不是坚持这种“漂亮”的行为,即当用户在下拉列表中创建一个部分时添加一行?

此外,即使我们可以完成您的要求(我可以设想一种我们可以做到的方式),当需要将用户的输入保存到服务器时,您会怎么做?您是否打算忽略最后一个空行?

【讨论】:

  • 是的,我认为添加按钮可以更好地工作。你是对的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-15
  • 2017-02-27
相关资源
最近更新 更多