我正在学习Ember.js,我正在尝试将它集成到Rails应用程序(普通应用程序,只是为了玩),因为大部分时间我都在使用 Rails。到目前为止一切顺利,我设法安装了它(我正在使用ember-rails
),但我遇到了一个小问题,似乎我无法弄清楚,即使我看过(我想)关于 Ember 和 Rails 的每个教程。
所以,问题是我不能让路由器将任何类型的数据传递给视图/模板。我什至在其中硬编码了一个 JSON 对象(而不依赖于适配器)以查看它是否有效,但没有成功。所以,我的代码如下所示:
轨道宝石文件Gemfile
:
ruby "1.9.3"
gem 'rails', '3.2.16'
gem 'sqlite3'
gem 'jquery-rails'
gem 'ember-rails'
gem 'ember-source'
gem 'pg'
group :assets do
gem 'sass-rails', '~> 3.2.3'
gem 'coffee-rails', '~> 3.2.1'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
gem 'therubyracer', :platforms => :ruby
gem 'uglifier', '>= 1.0.3'
end
导轨控制器app/controllers/users_controller.rb
:
class UsersController < ApplicationController
def index
@a_users = User.all
respond_to do |format|
format.html
format.json {render :json => @a_users}
end
end
end
导轨型号app/models/users.rb
:
class User < ActiveRecord::Base
validates :first_name, :presence => true
validates :last_name, :presence => true
end
Rails 序列化器app/serializers/user_serializer.rb
:
class UserSerializer < ActiveModel::Serializer
attributes :first_name, :last_name
end
铁路路线config/routes.rb
NewEmberOnRails::Application.routes.draw do
root :to => 'home#index'
resources :users
end
这几乎涵盖了 Rails 部分。如果我去访问,localhost:3000/users.json
我会得到一个格式很好的 JSON 对象(假设我在数据库中有一个 John Doe 用户):
{"users":[{"first_name":"John","last_name":"Doe"}]}
Ember.js 部分,我写如下:
灰烬商店app/assets/javascripts/store.js
NewEmberOnRails.Store = DS.Store.extend({
// Override the default adapter with the `DS.ActiveModelAdapter` which
// is built to work nicely with the ActiveModel::Serializers gem.
adapter: DS.ActiveModelAdapter
// revision: 11,
// url: 'http://localhost:3000'
});
revision
我什至玩过url
但没有。
Ember 路由器app/assets/javascripts/router.js
NewEmberOnRails.Router.map(function() {
return this.resource('users');
});
余烬路线app/assets/javascripts/route.rb
NewEmberOnRails.UsersRoute = Ember.Route.extend({
model: function() {
// return this.get('store').find('user');
return {users: [{
first_name: "John",
last_name: "Doe"
}, {
first_name: "Big",
last_name: "Bang"
}]};
}
});
如您所见,我在这里评论了商店,并在这里返回了一个硬编码的对象,但什么也没有。
灰烬控制器app/assets/javascripts/controller/users.js
NewEmberOnRails.usersController = Ember.Controller.extend({
resourceType: NewEmberOnRails.User
});
余烬模型app/assets/javascripts/model/user.js
var attr = DS.attr;
NewEmberOnRails.User = DS.Model.extend(
first_name = attr(),
last_name = attr()
);
最后,视图、Rails 和 Ember 在一起(我想我在这里做错了,但我不知道是什么):
Rails 用户视图app/views/users/index.html.erb
<h1>Users</h1>
<script type="text/x-handlebars">
{{ view NewEmberOnRails.ListUsersView }}
</script>
所以,这是调用 Ember 视图,这里是 ( app/assets/javascripts/views/users/list.js
):
NewEmberOnRails.ListUsersView = Ember.View.extend({
templateName: 'users/users',
usersBinding: 'NewEmberOnRails.usersController'
});
那就是在users
这里使用模板(app/assets/javascripts/template/users/users.handlebars
):
{{#each users}}
{{view NewEmberOnRails.ShowUserView userBinding="this"}}
{{else}}
No users!
{{/each}}
现在,在ShowUserView
我有(app/assets/javascripts/views/users/show.js
):
NewEmberOnRails.ShowUserView = Ember.View.extend({
templateName: 'users/show'
});
并且正在渲染这个模板 ( app/assets/javascripts/templates/users/show.handlebars
)
First Name: {{user.first_name}}
所以,总结一切......当我访问时,localhost:3000/users
我只得到No users!
,女巫引导我两种可能性:
users
我在遍历它时没有任何数组app/assets/javascripts/template/users/users.handlebars
- 我有它,但它是空的,所以路线和我的视图/模板之间存在问题。
有人知道吗?