【问题标题】:Change the scope of onAfterChange in jsViews改变jsViews中onAfterChange的范围
【发布时间】:2013-12-16 13:52:39
【问题描述】:

我有非常嵌套的数据,所以我添加了一个{{scope variable}}...{{/scope}} 标签,它只是改变了范围:

scope: function (newScope) {
    return this.tagCtx.render(newScope);
}

到目前为止,此方法有效,但此示例代码在 onAfterChange 中存在问题,我使用它来将数据推送回服务器。

在初始化器中:

data.Foo.Bar.TheObject = new MyObject('Foo'); // has "Name" property set to "Foo"

在模板中:

{{scope Foo.Bar.TheObject}}
     <input type="text" data-link="Name" />
{{/scope}}

它将正确显示“Foo”,但是当我更改它时,在onAfterChange 中我得到data 对象而不是TheObject。我可以向{{scope}} 添加一些内容以实现onAfterChange 的范围更改吗?
{{for}} 标签有这种行为,但我不能循环遍历单个对象。)

【问题讨论】:

  • 您说:“{{for}} 标签有这种行为,但我不能遍历单个对象”。但它不一定是一个数组。你可以做{{for some.object}}...见jsviews.com/#fortag“为给定的对象渲染指定的模板,或者遍历给定的数组”
  • 对不起,我显然误解了{{for}} 标签,谢谢你的澄清。但为了完整起见:是否可以更改标签的作用域行为?
  • 我会尽快在文档中介绍这种情况。如果您愿意,您能否在 JsViews GitHub 项目上创建一个与此相关的问题,并包括上面的完整示例,或者一个 jsfiddle 说明您认为现在没有按预期工作的内容?谢谢
  • 所以我花了很长时间弄清楚 this fiddle 现在我不确定 jsViews 是否真的做错了。第一种方法(基于event.type === "change")只触发一次,但在使用this.data 时需要我所说的Scoping。如果使用event.currentTarget"propertyChange" 不需要作用域 - 但它会触发两次。应该首选哪种方法?还是我误解了有关如何以及在何处调用 Save-To-Server 方法的部分内容?
  • 在提交 50 中所做的更改现在允许您使用 .observeAll 获取有关更改的完整信息。 onAfterChange 监听的是视图的变化,而不是数据的变化,所以一个数据变化肯定会导致不止一个 onAfterChange,这取决于有多少视图绑定到相同的数据。你有 "{^{:Foo.Bar.Name}}" 和 - 因此有两个事件。见jsviews.com/#observeAll

标签: javascript jsviews


【解决方案1】:

正如上面 cmets 中提到的,{{for}} 标签确实适合您想要将当前数据上下文(mrs_sheep 称为“范围”)移动到不同对象(或数组)的场景。

您可以使用{{for my.path.to.some.objectOrArray}} - 目标不必是数组。

http://www.jsviews.com/#fortag“为给定对象渲染指定模板,或遍历给定数组”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    • 2012-11-23
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    相关资源
    最近更新 更多