2012-12-27 134 views
2

我写了这个非常简单的Ember代码,但由于某种原因,当我按下按钮时事件似乎没有触发。有小费吗?Ember.js事件不起作用

<!DOCTYPE html> 

<html> 

    <head> 
    <title>Test</title> 
    </head> 

    <body> 

    <script type="text/x-handlebars"> 
     {{#view CounterView}} 
     Counter: {{Counter.value}} 

     <button {{action "increment"}}>Add 1</button> 
     {{/view}} 
    </script> 

    <script src="jquery-1.7.2.min.js"></script> 
    <script src="handlebars-1.0.rc.1.min.js"></script> 
    <script src="ember-1.0.pre.min.js"></script> 

    <script> 
     Counter = Ember.Object.create({ 
     value: 1, 
     }) 

     CounterView = Ember.View.extend({ 
     increment: function(event) { 
      Counter.incrementProperty('value'); 
     } 
     }) 
    </script> 
    </body> 
</html> 

回答

3

为了使事件系统正常工作,Ember.js需要创建和初始化应用程序(该框架为您完成)。

您的应用为例,默认Ember.js开始的jsfiddle,这里是结果:

HTML模板:

<script type="text/x-handlebars" data-template-name="application"> 
    {{#view MyApp.CounterView}} 
    Counter: {{MyApp.counter.value}} 
    <button {{action "increment"}}>Add 1</button> 
    {{/view}} 
</script> 

的Javascript:

//Thanks to @Trek Instructions: 
//The following line creates one listener for each user event (e.g. 'click') and 
//controls event delegation. 
MyApp = Ember.Application.create(); 

MyApp.counter = Ember.Object.create({ 
    value: 1 
}); 

MyApp.CounterView = Ember.View.extend({ 
    increment: function(event) { 
    MyApp.counter.incrementProperty('value'); 
    } 
}); 

工作小提琴:http://jsfiddle.net/6p6XJ/260/

1

我会建议你阅读http://trek.github.com/,特别是“上的最小可行灰烬应用程序”的一部分。

从1.0.pre开始,Ember应用程序需要一个路由器才能存在。然而,网上的大多数文档/例子都指向0.9.5时代

trek guide + ember docs是从框架开始的好方法。