对于一般的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/
提前感谢您的帮助:)
答案 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()
{...}
});
在模型钩子期间,控制器尚未初始化,因此您无法使用其任何值。