【问题标题】:JsViews Data-Link Helper FunctionJsViews 数据链接帮助函数
【发布时间】:2015-11-01 18:50:41
【问题描述】:

我定义了以下助手:

$.views.helpers({
    total: function(lines) {
        var total = 0;

        for (var i = 0; i < lines.length; i++) {
            total += lines[i].price * lines[i].quantity;
        }

        return total;
    }
});

然后我有以下代码将我的模型数据链接到我的视图:

var model = {
    lines: []
};

$("#lines").link(true, model);

最后在视图中我有以下内容:

<span data-link="~total(lines)"></span>

但是,每当我明显地从数组中添加或删除项目时,它都不会更新总数。我读到您可以将lines.length 传递给函数,并且确实在我每次添加或删除项目时都会更新总数。但是当我观察到根据任何行更新数量属性时,总数没有更新。

如果有人能告诉我如何做到这一点,我将不胜感激。

谢谢

【问题讨论】:

    标签: jsviews


    【解决方案1】:

    是的,正如您在https://github.com/BorisMoore/jsviews/issues/280 中发现的那样,目前没有依赖于“全部”的声明性语法。可能在 V1.0 之后将添加该功能 - 类似于 total.depends = "lines**";total.depends = "lines*.*"; 的帮助者:function total(...)...

    与此同时,您可以使用程序化方法 - 这仍然非常简单。只需添加以下内容即可触发刷新:

    $.observable(model.lines).observeAll(function() {
        $("#lines").link(true, model);
    })
    

    或通过写入仅刷新“总”跨度:

    <span id="total" data-link="~total(lines)"></span>
    

    $.observable(model.lines).observeAll(function() {
        $("#total").link(true, model);
    })
    

    例如:http://jsfiddle.net/BorisMoore/wch601L9/

    【讨论】:

    • 谢谢鲍里斯。我已经在生产中使用它一段时间了,它非常稳定,所以我确信 v1 离我不远了。我只要求一个小建议。如果你可以说 $(selector).link(model) 而不是传入 true,那就太好了。查看代码应该只是检查第一个参数是否为对象的情况。
    • 使用 $(selector).link(true, model ...) 的语法具有明显区别于 $(selector).link(linkExpression, model ...) 的优点。如果有一个“真”,那么它正在激活声明性数据链接表达式。如果不是,那么它将以编程方式绑定一个 linkExpression。我认为通过 API 的更多“自我记录”性质来传递该布尔值的努力是合理的。第二个参数始终是模型。第一个是用于声明式绑定的标志 (true),或用于编程绑定的表达式。
    • 感谢您的澄清。你有任何编程绑定的例子吗?我只通过传入 true 来使用声明式绑定。
    • 我有一些关于声明式和编程式顶级数据链接的新文档主题 - 这将是下一次更新的一部分。同时,还有单元测试,例如:github.com/BorisMoore/jsviews/blob/master/test/unit-tests/…。另请参阅此语法:github.com/BorisMoore/jsviews.com/blob/gh-pages/samples/… 可以使用 template.link(selector, model) 编写 - 但也支持 $(selector).link(template, model)。
    • 谢谢。这很有帮助。
    【解决方案2】:

    我发现了以下问题,其中有几个建议的修复方法:

    https://github.com/BorisMoore/jsviews/issues/280

    不幸的是,两者都有点像黑客,但我想现在必须这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多