2013-04-07 81 views
0

使用值从模型实例我想在我的模板使用的值从我的模型实例,在PHP中我会通过执行以下去:ember.js模板

<?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全名称值显示?

回答

1

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

  1. 虽然你的确在创建一个实例说Example.LocalUser = Example.User.create({...}),这是一个在Ember中的反模式。约定是在应用程序名称空间上保留类别,如Example.IndexRoute,Example.User等。但从不实例。模型对象是实例,将它们展示给视图的最佳方法是使用modelsetupController钩子设置控制器。
  2. 据我所知,没有{{#model}}...{{/model}}把手帮手。你可以使用控制器提供的变量:{{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> 

输出:

李四 - 李四

+0

但如果我想创建示范用户的多个实例,为让说一个聊天应用程序是什么? – xorinzor 2013-04-07 21:23:27

+0

然后,您从'model'钩子返回一个*数组*,并使用模板中的{{#each}} Handlebars helper遍历它们。 – zeppelin 2013-04-07 22:15:38