【发布时间】:2015-09-16 11:17:39
【问题描述】:
当基础数据更改时,我遇到了更新 JSViews 模板的问题。它涉及使用转换器功能将数据链接到基础数据的跨度。当异步回调服务器后底层数据发生变化时,跨度文本不会更新。
标记:
{^{for thedata.myarrayobject}}
<span data-link="{myconverter:var1:} name{:'theName' + var2}"></span>
{{/for}}
脚本:
$.views.converters({
myconverter: function (val) {
switch (val) {
case 1:
return 'Test1';
break;
case 2:
return 'Test2';
break;
default:
return 'Default';
}
}
});
跨度根据 data.myarray 对象中的值在页面加载时正确显示。例如。如果我们有:
thedata.myarrayobject[0].var1='1';
thedata.myarrayobject[0].var2='John';
thedata.myarrayobject[1].var1='2';
thedata.myarrayobject[1].var2='Matthew';
它将加载为:
<span name="theNameJohn">Test1</span>
<span name="theNameMatthew">Test2</span>
但是,如果在异步回调后底层数据发生变化:
thedata.myarrayobject[0].var1='2';
thedata.myarrayobject[0].var2='John';
thedata.myarrayobject[1].var1='1';
thedata.myarrayobject[1].var2='Matthew';
跨度文本保持不变。
我已经调试了 js 代码,并且底层数组参数 'var1' 肯定被设置为新值。我试过打电话:
$.observable(thedata.myarrayobject).refresh(thedata.myarrayobject);
但无济于事。
我显然希望跨度文本随着基础数据的变化而调整 - 任何帮助将不胜感激!
【问题讨论】:
-
您能否展示您最初如何链接到数据的代码,以及更新到新数据的代码。理想情况下是一个 jsfiddle - 有一个按钮调用您当前的代码以更新到新数据?那我去看看……
-
嗨@BorisMoore - 只是回答你的问题,我使用的是link()方法,所以数据链接应该可以工作....但是你关于我如何更新数据的第二个问题已经指出了我在正确的方向。我是按照上面的方法做的:直接更新js中的参数值。我刚刚在一个可观察的包装器中尝试过它 - 它已经奏效了!我会在下面贴出来。有什么办法可以给你一些功劳 - 我怀疑如果没有你的评论我会这样做!
-
我添加了一个答案,以展示您可以“可观察地”合并数据的一些替代方法。
标签: jquery jsrender jsviews data-linking