Ember.js -我想要一个Action事件(on=""),当有一个新的路由转换时触发

Ember.js - I want an Action event (on="") to trigger when there is a transition to a new Route

本文关键字:quot 有一个 路由 转换 我想要 js 一个 on 事件 Action Ember      更新时间:2023-09-26

我想要一个Action事件(on=")在转换到新路由时触发。

我已经看到了Action事件处理程序的列表,我能找到的最接近的是将动作附加到页面上最大的HTML元素上,并用'Mousemove '触发它。这是我想要做的一件有严重缺陷的事情。

把它画出来。

<div {{action 'displayEitherHtml1or2'}} class="largestDOMelement">
  {{#if showHtml1}}
   // html 1 inside
  {{/if}}
  {{#if showHtml2}}
  // html 2 inside
  {{/if}}
</div>

'/objects'是一个对象列表,点击其中一个会指向'object/somenumber'。当我进入'object/somenumber'页面时,动作应该会自动触发。

更新:我已经从以前的更新和转储到我的DocRoute的内容,但没有它被触发,当我过渡到'doc'通过{{#链接到'doc' this。docID}} {{docTitle}}{{/链接}}

VpcYeoman.DocRoute = Ember.Route.extend(VpcYeoman.Authenticated,{
    toggleLetterSwitch: false,
    togglePermitSwitch: false,
    activate: function () {  
      var docTemplateID = this.get('docTemplateID');
      if ( docTemplateID == 2) {
        this.set('toggleLetterSwitch', true);
        this.set('togglePermitSwitch', false);
        console.log('docTemplateID equals 2');
      } else {
        this.set('toggleLetterSwitch', false);
        this.set('togglePermitSwitch', true);
      }        
    }
});

UPDATE DOS: setDocID在DocsController中设置为1。这是全部内容

VpcYeoman.DocsController = Ember.ArrayController.extend({ 
  tempDocId: 1, 
  actions: {
    addDoc: function (params) {
      var docTitle = this.get('docTitle');
      var docTemplateID = 1;
      var docTemplateID = this.get('tempDocId');
      console.log(this.get('tempDocId'));
      var store = this.store;
      var current_object = this;
      var doc = current_object.store.createRecord('doc', {
        docTitle:docTitle,
        docTemplateID:docTemplateID
      });
      doc.save();
      return true;
    },
    setDocId: function (param) {
      this.set('tempDocId', param);
      console.log(this.get('tempDocId'))
    },
  }
});

正如@fanta评论的那样,看起来你正在寻找路由中的activate钩子。当你进入定义它的路由时,它会被调用。如果你想在每次转换时都调用它,你可以考虑为你的应用定义一个基本路由,并扩展它,而不是Em.Route:

App.BaseRoute = Em.Route.extend(
    activate: function () {
        // Do your thing
    }
);
App.YourRoutes = App.BaseRoute.extend()

可能有一个更合适的地点/时间来做这件事,但在不知道你的动作是做什么的情况下,这可能是最好的猜测。

ETA:看看你的编辑,你不会希望所有的路由都像我上面做的那样扩展App.BaseRoute;你应该在需要activate钩子的路由中显式地包含它。

相关文章: