2014-01-12 20 views
0

我學習Ember.js爲我們說話,我所要做的是將其集成到一個的Rails應用(香草應用程序將數據發送到模板/視圖,只是爲了玩耍),因爲大部分時間我都在使用Rails。到目前爲止,我設法安裝了它(我正在使用ember-rails),但是我遇到了一個小問題,即使我看過(我想)每個關於Ember和Rails的教程都看不出來。Ember.js不是在一個Rails應用程序

所以,問題是我不能讓路由器傳遞任何類型的數據到視圖/模板。我甚至硬編碼了一個JSON對象(而不是依賴於適配器)來查看這是否有效,但沒有成功。所以,我的代碼如下所示:

的Rails的Gemfile 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 

Rails的控制器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 

Rails的模型app/models/users.rb

class User < ActiveRecord::Base 
    validates :first_name, :presence => true 
    validates :last_name, :presence => true 
end 

Rails的串行0​​

class UserSerializer < ActiveModel::Serializer 
    attributes :first_name, :last_name 
end 

Rails的路線config/routes.rb

NewEmberOnRails::Application.routes.draw do 
    root :to => 'home#index' 
    resources :users 
end 

而這幾乎涵蓋了Rails的一部分。如果我去拜訪localhost:3000/users.json我得到這個格式的一個很好的格式化的JSON對象(考慮我在數據庫中有一個李四用戶): {"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' 
}); 

我即使revisionurl但沒有發揮各地。

灰燼路由器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和灰燼在一起(我想我做錯了什麼在這裏,但我無法弄清楚什麼):

Rails的用戶查看app/views/users/index.html.erb

<h1>Users</h1> 

<script type="text/x-handlebars"> 
    {{ view NewEmberOnRails.ListUsersView }} 
</script> 

所以,這是調用灰燼看,這裏(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) :

0123現在

,在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!,女巫帶我有兩種可能性:

  1. 我不必在我通過它在app/assets/javascripts/template/users/users.handlebars
  2. 迭代的時候我有任何users陣列,但是是空的,所以路線和我的意見/模板之間的問題。

有沒有人有什麼想法?

+0

您正在使用什麼燼/燼數據的版本?應用程序是否嘗試向端點發送網絡請求?如果是這樣,它擊中'users'或'users.json'? – Kingpin2k

+0

你是否從你的餘燼視圖中獲得任何純HTML?我沒有看到正在創建的應用程序 – Kingpin2k

+0

我正在使用'ember-rails'版本'0.14.1'。這給我Ember版本'1.3.0',Ember數據版本'0.14',全部在jQuery'1.10.2'(來自'jquery-rails 3.0.4')。不,我忘了提及這一點。當用戶點擊時,該應用不會嘗試任何請求。 該應用程序是在'app/assets/javascripts/application.js'中創建的。就像'NewEmberOnRails = Ember.Application.create();'。客戶端沒有返回錯誤。 – Vincent

回答

0

不管你想不想,當然可以,但如果是我的,我會讓我的路線返回一個數組,並讓我的控制器延伸到ArrayController。看起來更簡單,並將匹配你真的要從商店中獲得(User的集合)。除非你真的想返回包含數組的單個對象,這是違背「正常」灰燼數據usage--

NewEmberOnRails.UsersRoute的代碼,你已經註釋掉store.find,並與東西是不是取代它同樣的事情...試試這個:

NewEmberOnRails.UsersRoute = Ember.Route.extend({ 
    model: function() { 
    // return this.get('store').find('user'); 
    return [{ 
     first_name: "John", 
     last_name: "Doe" 
    }, { 
     first_name: "Big", 
     last_name: "Bang" 
    }]; 
    } 
}); 

和:

NewEmberOnRails.usersController = Ember.ArrayController.extend({ 
    resourceType: NewEmberOnRails.User 
}); 
相關問題