2013-01-18 36 views
5

Tôi có http://jsfiddle.net/pF2cF/6/ mã với 2 vấn đề: 1. nhấp chuột "myButton" không đi đến chức năng clickButton trong App.indexController 2. nhập trong trường văn bản sẽ kích hoạt nút MyButton đầu tiên (nếu # 1 được giải quyết)ember.js <nút {{action}}></button> không hoạt động đúng

Có ai có thể giúp giải quyết chúng không? Tôi có một cách giải quyết cho bằng cách sử dụng, nhưng tôi không chắc chắn những gì sai với việc sử dụng.

Cảm ơn!

Các đoạn mã như sau, sử dụng ember.js từ chi nhánh tổng thể của nó trên 2013/01/14:

<script type="text/x-handlebars" data-template-name="myTemplate"> 
     <button {{action clickButton target="App.indexController"}} >MyButton1</button> 
     {{view App.MyView placeholder="Input something 1 and enter"}} 
    </script> 

App = Em.Application.create({ 
    ready: function() { 
    } 
}); 

App.Router.map(function() { 
    this.route("index", { path: "/" }); //master 01142013 syntax 
}); 
App.IndexRoute = Ember.Route.extend({ 
    renderTemplate: function() { 
    this.render('myTemplate', {controller: 'indexController'}); 
    } 
}); 

App.indexController = Ember.Controller.extend({ 
    clickButton: function() { 
    alert("clickButton"); 
    } 
}); 

App.MyView = Em.TextField.extend({ 
    insertNewline: function (evt) { 
    alert("enter pressed"); 
    } 
}); 

Trả lời

18

Bạn thực hiện một số lỗi nhỏ. Tôi đã đặt phiên bản đang hoạt động trên JSBin.

vấn đề Stylistic mà không gây ra bất kỳ thất bại:

  • Bạn không cần phải khai báo bất kỳ index tuyến đường.
  • Bạn không cần phương thức ready trống trên Application. Nói chung, đặt logic khởi động vào ApplicationRoute#setupController, nơi bạn cũng sẽ có quyền truy cập vào bộ điều khiển.
  • Bạn nên đặt tên mẫu của bạn có cùng tên với tuyến đường trừ khi bạn đang cố gắng chia sẻ một mẫu duy nhất trên nhiều tuyến đường. Trong trường hợp này, bạn chỉ nên sử dụng index thay vì myTemplate.

Các vấn đề liên quan đến những thất bại:

  • tên điều khiển nên được vốn hóa: App.IndexController không App.indexController
  • Bạn không nên chỉ định một mục tiêu nếu mục tiêu là bộ điều chỉnh dòng.
  • Cuộc gọi render của bạn chỉ định { controller: 'indexController' }. Nó phải là { controller: 'index' }.
+0

Cảm ơn! Điều này hoạt động tuyệt vời! – xinqiu

Các vấn đề liên quan