Jquery 使用didInsertElement的emberjs只在内部运行一次代码

Jquery 使用didInsertElement的emberjs只在内部运行一次代码,jquery,ember.js,views,Jquery,Ember.js,Views,我有一个ember应用程序,其代码如下: App.AccountListingsView = Ember.View.extend({ didInsertElement: function() { console.log('did this fire'); } }); 每次我转换到这个视图时,它都会激发didInsertElement中的任何内容(这很好),但是。。。加载视图后,我希望它只启动一次。我不需要每次返回此页面/视图时都触发它 是否有更好的方法来执行

我有一个ember应用程序,其代码如下:

App.AccountListingsView = Ember.View.extend({
    didInsertElement: function() {

        console.log('did this fire');

    }
});
每次我转换到这个视图时,它都会激发didInsertElement中的任何内容(这很好),但是。。。加载视图后,我希望它只启动一次。我不需要每次返回此页面/视图时都触发它

是否有更好的方法来执行代码,使其在渲染视图后触发一次,而不是在您离开该视图并再次返回该视图时再次触发?现在,如果我进入另一个视图并返回到listings视图,它会在控制台中再次触发。

不,您不能。 当您回来时,视图将被破坏并重新创建。这总是会被炒鱿鱼


最好根据某些控制器状态来调整您的操作。

您可以(也应该)安全地将jQuery选择器放置在
didInsertElement
中。绑定对于视图的每个实例都是唯一的,以防它在转换时被破坏和重新呈现,正如您所建议的。例如,我想要解决的问题是,如果我在diInsertElement中有这样的内容:$('ul')。append('li/>');一旦我离开视线回去,它会再次开火。。。这意味着我将在页面上有2个li,我只希望jQuery代码触发一次,类似于on ready,但我可以在on ready中使用它,因为视图可能还没有呈现。为什么要手动附加这样的DOM元素?您需要将这种逻辑集成到Handlebar模板或组件或其他东西中。这是一个示例,我只是想知道如何在didInsertElement中只运行一次代码。。。因此,当我切换视图并返回时,它不会再次运行相同的代码。除非除了DidInsertelementMember之外还有其他可以使用的东西,否则你真的需要理解MV*并且你必须喝Kool Aid才能使用这个框架。将列表项任意附加到页面上的所有列表显然不符合任何真正有用的逻辑。。。所以“跑一次”并不像你想象的那么简单。是的,它将运行一次,但有可能视图将被破坏,余烬将为视图重新呈现一个全新的唯一DOM元素。因此,你需要遵循惯例。