Ember.js:无法访问控制器中返回的model()钩子

时间:2016-05-26 08:47:13

标签: javascript model-view-controller ember.js

对于一般的Web开发来说,我是一个新手。

我正在使用最新版本的ember

我正在尝试通过“浏览”操作重定向到某些页面,该操作将输入标题和关键字与数据库(Firebase)中的“主题”进行比较。 如果他们匹配,我可以看到我的页面,如果他们不,我会抛出错误。

这是代码,

Index.hbs

 <div class="jumbotron">
    <div class="container">
    <form>
      <div class="form-group">
        <label for="inputTheme">Theme</label>
    {{input type="theme" value=inputTheme class="form-control" id="inputTheme" placeholder="Theme"}}
      </div>
          <div class="form-group">
        <label for="inputKeyword">Password</label>
        {{input type="password" value=inputKeyword class="form-control" id="inputKeyword" placeholder="Keyword"}}
      </div>
    <button class='btn btn-info' {{action 'browse'}}>Browse</button>
    </form>
      </div>
    </div>

index.js(Controller)

import Ember from 'ember';

export default Ember.Controller.extend({
  isDisabled: true,

  inputTheme: '',
  inputKeyword: '',    

  actions: {
    browse() {
        this.transitionToRoute("/themes/:theme_id/browse");
    }

  }
});

index.js(路线)

import Ember from 'ember';

export default Ember.Route.extend({
    model()
    {
        this.store.query('theme', {
        orderBy: 'title',
        equalTo: this.get('inputTitle')
      }).then(function(data) {
        return data.get('firstObject');
      });

    }
});

Router.js

import Ember from 'ember';
import config from './config/environment';

const Router = Ember.Router.extend({
  location: config.locationType
});

Router.map(function() {
  this.route('about');
  this.route('contact');
  this.route('browse', { path: '/themes/:theme_id/browse'});


  this.route('admin', function() {
    this.route('contacts');
  });

  this.route('themes', function() {
    this.route('new');
    this.route('edit', { path: '/:theme_id/edit'});
    this.route('browse', { path: '/:theme_id/browse'});
  });
});

export default Router;

Theme.js(模特)

import Ember from 'ember';
import Model from 'ember-data/model';
import attr from 'ember-data/attr';

export default Model.extend({
  title: attr('string'),
  keyword: attr('string'),
  master: attr('string'),
  description: attr('string'),

});

事情是:

1)我没有从路由访问“inputTitle”,所以我无法动态查询。虽然当我这么做的时候很难得到我需要的东西。

2)当我尝试从我的控制器访问模型时,它表示其中没有任何内容。

我错过了什么? 我做错了什么?

这是指向当前App的链接

https://euretest.firebaseapp.com/

提前感谢您的帮助:)

1 个答案:

答案 0 :(得分:1)

在您的路线模型挂钩中,您需要返回您所做的查询。

import Ember from 'ember';

export default Ember.Route.extend({
model()
  {
    return this.store.query('theme', {
      orderBy: 'title',
      equalTo: this.get('inputTitle')
    }).then(function(data) {
    return data.get('firstObject');
    });
  }
});

这将使您在控制器/模板中可用。

作为'inputTitle'的形式,从这段代码中我无法真正看到你定义它的位置。在路线中执行this.get('inputTitle')将查找路线的inputTitle属性,即

import Ember form 'ember';

export default Ember.Route.extend({
inputTitle: 'some title',
model()
  {...}
});

在模型钩子期间,控制器尚未初始化,因此您无法使用其任何值。