【问题标题】:jsviews - Update field of array elementjsviews - 更新数组元素的字段
【发布时间】:2015-07-10 09:21:39
【问题描述】:

我对 jsviews 有疑问。我想绑定一个元素数组。每个元素都是一个对象。元素是动态添加的。每个元素的一个字段的值基于另一个字段计算。不每次都刷新数组怎么办?

js:

model = {
    elements: []
};
$(function() {
    $.when($.templates('#tmpl').link('#container', model)
            .on('click', '#addElement', function () {
                $.observable(model.elements).insert({});
            })
    ).done(function() {
        $.observe(model, 'elements', function(e, eventArgs) {
            if (eventArgs.change === 'insert') {
                eventArgs.items.forEach(function(addedElement) {
                    $.observe(addedElement, 'value1', function(e) {
                        var element = e.target;
                        element.value2 = 'Value1 is ' + element.value1;
                        $.observable(element).setProperty('value2', element.value2);
                        $.observable(model).setProperty('recent', element.value1);
                    });
                });
            }
        });
    });
});

html:

<div id="container"></div>

<script id="tmpl" type="text/x-jsrender">
    <input id="addElement" type="button" value="add new element"/>
    <div id="box">
        {^{for elements tmpl="#elementTmpl"/}}
    </div>
    <input type="text" data-link="recent" />
</script>

<script id="elementTmpl" type="text/x-jsrender">
    <div>
        <input name="input1" data-link="value1" />
        <input name="input2" data-link="value2" />
    </div>
</script>

我创建了 jsfiddle 来说明问题。

【问题讨论】:

    标签: javascript jquery jsviews


    【解决方案1】:

    您可以使用ObserveAll():http://www.jsviews.com/#observeAll。

    每次element.value1 更改时,您都会更新计算的属性element.value2 和model.recent。

    我在这里https://jsfiddle.net/1rjgh2sn/2/ 更新了你的小提琴:

    $.templates('#tmpl').link('#container', model)
        .on('click', '#addElement', function () {
            $.observable(model.elements).insert({});
        });
    $.observable(model).observeAll(function(e, eventArgs) {
        if (eventArgs.change === "set" && eventArgs.path === "value1") {
            var element = e.target;
            $.observable(element).setProperty('value2', 'Value1 is ' + element.value1);
            $.observable(model).setProperty('recent', element.value1);
        }
    });
    

    【讨论】:

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