【问题标题】:Rendering a template and invoking model hook in Ember.js在 Ember.js 中渲染模板并调用模型钩子
【发布时间】:2014-02-03 10:46:11
【问题描述】:

我正在使用 JSON 请求为名为 example 的模板填充模型。

App.ExampleRoute = Ember.Route.extend({
  model: function() {
    var url = "example/GetExamples";
    return Ember.$.getJSON(url).then(function(data) {
      return data;
    });
  }
});

示例模板完美地呈现了这些数据。现在我的后端可能会不时更改,因为我有另一个名为 addExample 的模板。它只是向服务器发送一个 JSON 请求,以从这个其他模板在数据库中添加一个条目。添加示例后,我尝试转换到示例模板,但我只看到旧数据。刷新页面时,会出现带有添加条目的新数据。

App.AddController=Ember.Controller.extend({
  postAddRequest: function() {
    var request = $.post("/example/AddExample", {params});
    request.then(this.success.bind(this), this.failure.bind(this));
  },
  success: function(data) {
    this.transitionToRoute('example');
  }
});

那么有什么方法可以强制 Ember 重新渲染“示例”模板并在路由中调用其模型钩子而不刷新页面。我不能使用 ember-data 进行持久性,因为它仍处于测试阶段。

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    过渡到路线并发送您想在路线上使用的数据。此外,路由应该在 url 中使用 id/slug。如果没有看到下面

    this.transitionToRoute('example', data);
    

    如果您已经在路线上并且想要更新当前设置的控制器的模型,您可以抓取该控制器并设置模型。

    从控制器

    App.SomeController = Em.Controller.extend({
      needs: ['example']
      someFunction: function(){
        var model = ... get new model;
        this.get('controllers.example').set('model', model);
      }
    });
    

    【讨论】:

    • 嗨。感谢您的回答。只是一些澄清,你的意思是另外路由应该在 url 中使用 id/slug 是什么意思?同样对于第二个示例,这仅在我在同一条路线上时有效吗?这意味着我应该在 ExampleRoute 上完成此任务??我不能从不同的路线获取模板的控制器吗?对不起,我是 ember 新手
    • 您建议的第二种方法有效,我可以从同一路线设置新模型,但我仍然无法从其他路线进行。
    • 我没有完全理解,你能用一个例子给我解释一下吗,emberjs.jsbin.com/OxIDiVU/189/edit
    • 您好,我添加了一个名为 change 的新模板,该模板将尝试在单击按钮时更改颜色模型。我正在尝试从名为 newColors 的变量中添加新模型。此外,我没有使用 ember 数据,因此存储不会出现。链接是emberjs.jsbin.com/OxIDiVU/190/edit
    • 所以在你的例子中,colors 资源甚至没有激活,当你尝试修改它时它会激活吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多