0

我想在我的模板中使用我的模型实例中的值,在 PHP 中我会执行以下操作:

<?php
class User {
    private $name;
    public function __construct($name) {
        $this->name = $name;
    }

    public function getName() {
        return $this->name;
    }
}

$localuser = new User("john doe");
?>

<p>My name is: <?= $localuser->getName(); ?></p>

但是我如何在 Ember.js 中做到这一点?还是我误解了 Ember.js 的 MVC 模型?

这是我用于创建 localuser 实例的 Ember.js 代码:

Example = Ember.Application.create();
Example.User = Example.Object.extend({
    firstname: null,
    lastname: null,
    network: null,

    fullName: function() {
        return this.get('firstName') + " " + this.get('lastName');
    }.property('firstName', 'lastName')

});

Example.LocalUser = Example.User.create({
    firstname: "John",
    lastname: "Doe"
});

Example.IndexRoute = Ember.Route.extend({
  setupController: function(controller) {
  },

  renderTemplate: function() {
      this.render("exampleTemplate");
  }
});

and my HTML template (which doesn't work):

<script type="text/x-handlebars" data-template-name="exampleTemplate">
{{#model Example.LocalUser}}
    {{fullName}}
{{/model}}
</script>

我需要在模板中添加什么才能从 Example.LocalUser 中获取全名值以显示?

4

1 回答 1

1

您必须做几乎与 PHP 中完全相同的操作:创建一个对象的实例。你几乎是对的,有一些错误:

  1. 尽管您确实是通过说 来创建实例Example.LocalUser = Example.User.create({...}),但这在 Ember 中是一种反模式。约定是将保留在应用程序命名空间中,例如Example.IndexRoute,Example.User等。但绝不是实例。模型对象是实例,将它们公开给视图的最佳方法是使用modelorsetupController钩子设置控制器。
  2. 据我所知,没有{{#model}}...{{/model}}Handlebars 助手。您可以使用控制器提供的变量:{{model}}或者只是{{controller}},如果您设置了它,例如。在控制器的路线中。
  3. 您的示例中有拼写错误:firstname-> firstName:)

综上所述,(大概)工作示例应该是这样的:

JavaScript:

Example = Ember.Application.create();

Example.User = Ember.Object.extend({
  firstName: null,
  lastName: null,
  network: null,

  fullName: function() {
    return this.get('firstName') + " " + this.get('lastName');
  }.property('firstName', 'lastName')
});


Example.IndexRoute = Ember.Route.extend({
  model: function() {
    var user = Example.User.create({
      firstName: "John",
      lastName: "Doe"
    });

    return user;
  },

  renderTemplate: function() {
    this.render("exampleTemplate");
  }
});

模板:

<script type="text/x-handlebars" data-template-name="exampleTemplate">
  {{model.fullName}} - {{controller.fullName}}
</script>

输出:

约翰·多伊 - 约翰·多伊

于 2013-04-07T19:42:09.710 回答