在Ember.js中使用getJSON for Data

时间:2013-08-11 22:42:30

标签: ruby-on-rails-3 ember.js

第一次使用Ember。

我已经阅读了所有内容,并可以帮助我建立理解。

我已经能够在rails模板中渲染Ember模板了。

现在我正在使用getJSON将数据绑定到ember模板,但是我遇到了一些错误。 Uncaught TypeError: Cannot call method 'reopenClass' of undefined Error while loading route: TypeError {}

API / V1 / newslinks_controller.rb

class Api::V1::NewslinksController < ApplicationController
  respond_to :json

  def index
    respond_with Newslink.all
  end

  def create
    respond_with Newslink.create(params[:newslink])
  end

  def update
    respond_with Newslink.update(params[:id], params[:newslink])
  end

  def destroy
    respond_with Newslink.destroy(params[:id])
  end
end

/api/v1/newslinks.json

{"newslinks":[{"id":1,"title":"A Sample Post","navlink":"This will be a simple post record."}]}

app.js

    App = Ember.Application.create({
      LOG_TRANSITIONS: true,
      LOG_ACTIVE_GENERATION: true,
      LOG_VIEW_LOOKUPS: true,
      rootElement: '#ember',
      ready: function() {
        console.log('I am app');
      }
    });

    App.Router.map(function() {
        this.resource('newslinks', { path: '/' });
        console.log("I am router")
    });

    App.IndexRoute = Ember.Route.extend({
    });

    App.NewslinksRoute = Ember.Route.extend({
      model: function() {
        return App.Newslink.all();
      }
    });

    App.Newslink.reopenClass({
         all: function() {
           return $.getJSON("/api/v1.newslinks_controller.json").then(function(response) {
                      var newslinks = [];

                      response.newslinks.forEach(function(newslink) {
                  newslinks.push(App.Newslink.create(newslink));
                }); 
                      return newslinks;
              });
         }
    });

newslinks.handlebars

<div class="offset1">
  <h1>Newslinks</h1>

  <ul>
    {{#each newslink in model}}
      <li>{{newslink.title}}</li>
      <li>{{newslink.navlink}}</li>
    {{else}}
      <li>There is no news.</li>
    {{/each}}
  </ul>

  {{outlet}}
</div>

感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

您尚未申报App.Newslink课程。

使用:

App.Newslink = Ember.Object.extend();

App.Newslink.reopenClass ...