【问题标题】:Emberjs: Jquery Function not being called after Handlebars Template is loadedEmberjs:加载Handlebars模板后未调用Jquery函数
【发布时间】:2013-10-10 14:11:17
【问题描述】:

我有一个 EmberJS 应用程序,我在其中尝试调用一个 jquery 函数,该函数使用 .css() 将一些 div 元素定位在页面上,用于特定的把手模板。

我的问题是,当 EmberJS 在模板中加载到我的应用程序时(无论是通过 url 更改还是 {{linkTo}},jquery 函数都不会被触发。也就是说,如果我刷新页面,它们会触发就好了一切都很好。此外,我有一个事件监听器,用于检测页面是否改变宽度,这将导致函数重新触发,这也很好。

我的猜测是 Ember 在最初加载模板后实际上并没有调用 jquery 函数。无论如何要解决这个问题?我想知道是否应该尝试使用把手直接从我的 scripts.js 调用一个函数?感谢您的帮助!

此外,如果不利用视图,这是否可能?或许只有 Handlebars 和组件?

【问题讨论】:

标签: jquery ember.js


【解决方案1】:

您需要将类似的代码放在视图的didInsertElement 方法中。例如,如果你的模板是project/index,你会这样做:

App.ProjectIndexView = Ember.View.extend({
    template: 'project/index',
    didInsertElement: function() {
    /// Your jQuery code here
    }
});

【讨论】:

  • 太棒了 :) 会试一试的。
  • 为什么不想使用视图?
  • 好吧,根据这个线程,视图最终将被取消以换取车把和组件。 discuss.emberjs.com/t/mvc-flow-chart-is-this-helpful/2287/12
  • 组件只是视图的扩展。视图基类不会去任何地方。组件/视图层绝对是与 dom 交互的正确位置,因为它是唯一接收 dom 和呈现事件的层。我应该补充一点,您应该始终考虑使用组件而不是直接视图,因为组件完全封装了视图的上下文并强制您定义组件与应用程序其余部分交互的接口。
  • 我完全同意丹的观点。通常,如果您在应用程序的不同部分使用相同的“视图”,您可能应该将其实现为component。示例可以是内联编辑表单或条形图。请注意,默认情况下,每个模板都会有一个关联的视图,您可以按照答案中的描述覆盖(并添加您自己的功能,例如通过将 jQuery 代码放入 didInsertElement)。如果您的 jQuery 代码只与那个模板相关,则可以将其放入模板视图中,否则将其重构为组件。
猜你喜欢
  • 2013-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-17
相关资源
最近更新 更多