Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ember.js setupController仅触发一次_Javascript_Ember.js_Javascript Framework - Fatal编程技术网

Javascript Ember.js setupController仅触发一次

Javascript Ember.js setupController仅触发一次,javascript,ember.js,javascript-framework,Javascript,Ember.js,Javascript Framework,假设我有一个观点: CellarRails.SearchTextField = Ember.TextField.extend({ templatename: 'index', insertNewline: function(){ this.get('controller').set('query', this.get('value')); // calling search method of application controller this.get('c

假设我有一个观点:

CellarRails.SearchTextField = Ember.TextField.extend({
  templatename: 'index',
  insertNewline: function(){
    this.get('controller').set('query', this.get('value'));

    // calling search method of application controller
    this.get('controller').send('search');
    this.set('value', '');
  }
});
应用程序控制器

CellarRails.ApplicationController = Ember.Controller.extend({
  needs: ['search'],
  query: '',

  // here is the search method
  search: function() {

    // I'm using ember-query lib, which provides this helper, it acts just like usual transitionToRoute
    this.transitionToRouteWithParams('search', {
      q: this.get('computedQuery')
    });
  },
  computedQuery: function() {
    this.get('controllers.search').set('q', this.get('query'));
    return this.get('query');
  }.property('query')
});
因此,现在它应该转换为
searchRoute

CellarRails.SearchRoute = Ember.Route.extend({
  serializeParams: function(controller) {
    return {
      q: controller.get('q')
    };
  },
  deserializeParams: function(params, controller) {
    controller.set('q', params.q);
  },

  // pass CellarRails.Track model to SearchController's context
  setupController: function(controller, context, params) {
    console.log('setup controller hooked!');
    controller.set('context', CellarRails.Track.find(params));
  }
});
rails.Track
模型中,我重新定义了
find
方法。
问题:此代码有效,但
setupController
钩子仅第一次启动(当我从
applicationRoute
转换到
searchRoute
时),但是如果我已经在
searchRoute
中,这个钩子不会启动,并且
找到
方法。Track
model也不会启动。

尝试在searchRoute中使用model:hook

model: function ( params, transition ) {
    return CellarRails.Track.find(params);
}

如果直接导航到url,则会调用此函数,希望所需的参数将位于参数中,但请尝试对其进行调试以检查:)

尝试在SearchRoute中使用model:hook

model: function ( params, transition ) {
    return CellarRails.Track.find(params);
}

如果您直接导航到url,则会调用此函数,希望所需的参数将位于参数中,但请尝试对其进行调试以检查:)

当您在路线上设置
setupController
时,不会调用
model
钩子。如果您想让钩子
model
setupController
都触发,您必须调用
this.\u super(…)
setupController
钩子中保持
model
钩子默认行为:

CellarRails.SearchRoute = Ember.Route.extend({
  ...
  model: function(params) {
    return CellarRails.MyModel.find();
  },
  setupController: function(controller, model) {
    this._super(controller, model);
    ...
  }
  ...
});

希望有帮助。

当您在路线上设置
setupController
时,不会调用
model
挂钩。如果您想让钩子
model
setupController
都触发,您必须调用
this.\u super(…)
setupController
钩子中保持
model
钩子默认行为:

CellarRails.SearchRoute = Ember.Route.extend({
  ...
  model: function(params) {
    return CellarRails.MyModel.find();
  },
  setupController: function(controller, model) {
    this._super(controller, model);
    ...
  }
  ...
});

希望能有所帮助。

以下是对该问题的解释:
以下是对该问题的解释:

`如果路线是通过过渡输入的(例如,当使用“链接到车把”辅助工具时),则已经提供了模型上下文,并且不会调用此挂钩。`在我的例子中,路线是通过过渡输入的。无论如何,模型钩子也只发射了一次。你想从searchroute移动到searchroute吗?在这种情况下,我会考虑使用{{Actudi}}助手来控制按钮所做的操作,而不是使用Link Kuttoi在这种情况下不使用按钮或Link to Help。然后已经提供了一个模型上下文,并且没有调用这个钩子。无论如何,模型钩子也只发射了一次。你想从searchroute移动到searchroute吗?在这种情况下,我会考虑使用{{Actudi}}助手来控制按钮所做的操作,而不是使用Link Kuttoi在这种情况下不使用按钮或Link to Help。看起来我可以使用的东西,谢谢,但是这样做可以吗?我的意思是,它看起来有点黑,不是吗?@Nikita,我知道它可能看起来有点黑,但这种行为是从RC4开始引入的:所以你做得很好:)问题仍然存在——如果我从
applicationRoute
转换到
SearchRoute
,它会起作用,但是如果我已经在
searchRoute
上并执行
SearchTextField
didinertelement
,它将触发
applicationController
search
方法,该方法将触发
transitionToRoute
searchRoute
,但不会发生,
setupController
hook不会触发两次。我想我在设计中犯了一个逻辑错误。@Nikita,嗯,看看你的代码,看起来你在使用
ember查询
lib,这可能与你的行为有关。这是我可以处理的事情,谢谢,但这样做可以吗?我的意思是,它看起来有点黑,不是吗?@Nikita,我知道它可能看起来有点黑,但这种行为是从RC4开始引入的:所以你做得很好:)问题仍然存在——如果我从
applicationRoute
转换到
SearchRoute
,它会起作用,但是如果我已经在
searchRoute
上并执行
SearchTextField
didinertelement
,它将触发
applicationController
search
方法,该方法将触发
transitionToRoute
searchRoute
,但不会发生,
setupController
hook不会触发两次。我想我在设计中犯了一个逻辑错误。@Nikita,嗯,看看你的代码,你似乎在使用
ember查询
lib,它可能与你正在经历的行为有关