2012-03-14 69 views
2

特点: 添加新“标签”可能的行动,比如在默认的警报事件之后。Emberjs

理念:

  • 创建TabsController
  • 创建initilizerView并用一个列表参数处理TabsController.Content
  • 当视图“didInsertElement”,它的操作警报事件添加到默认内容 但如果我添加一个新的我不知道如何再次行动这function ("didInsertElement")

请帮助

的jsfiddle http://jsfiddle.net/chalien/Hxste/2/

通过pangratz 感谢您的帮助和重构:)

http://jsfiddle.net/chalien/Hxste/

+0

我补充说: “jQuery的” 标签到这个问题,因为它是JQuery的有关。 – 2012-03-14 08:50:47

+0

@MikeAski如果你给编辑的建议,这将是很好的保持他们的实质和改善其他事情,如格式化拼写等**也**在帖子:) – gideon 2012-03-14 09:43:20

+0

thnks @MikeAski我是一个stackoverflow新手 – 2012-03-14 12:08:17

回答

1

可以使用action把手帮手,见http://jsfiddle.net/jmDXP/

把手:

<script type="text/x-handlebars" id="mainview" > 
    {{#each list}} 
    <div {{action "clicked"}} >{{title}}/{{desc}}</div> 
    {{/each}} 
</script> 

<script type="text/x-handlebars" > 
    <div id="container"></div> 
    {{#view App.TabView}} 
     {{view Ember.TextField valueBinding="title"}} 
     {{view Ember.TextField valueBinding="desc"}} 
     <button {{action "addTab" }} >Add</button> 
    {{/view}} 
</script> 
​ 

的JavaScript:

var get = Ember.get; 

App = Ember.Application.create({}); 

App.Tab = Ember.Object.extend({ 
    title: null, 
    desc: null 
}); 

App.TabsController = Ember.ArrayController.create({ 
    content: [], 
    resourceType: App.Tab, 
    addTab: function(title, desc) { 
     this.pushObject(App.Tab.create({ 
      title: title, 
      desc: desc 
     })); 
    }, 
    init: function() { 
     this._super(); 
     var i = 0; 
     for (i = 0; i <= 4; i++) { 
      this.addTab("hola" + i, "test " + i); 
     } 
    } 
}); 

App.TabView = Ember.View.extend({ 
    addTab: function() { 
     var title = get(this, 'title'); 
     var desc = get(this, 'desc'); 
     App.TabsController.addTab(title, desc); 
    } 
}); 

App.initializeView = Ember.View.create({ 
    templateName: 'mainview', 
    listBinding: 'App.TabsController', 
    clicked: function(view, event, context) { 
     console.log('clicked @', get(context, 'title')); 
    } 
}); 

App.initializeView.appendTo('#container');​ 

注:在即将到来的版本的action回调改变的参数,见emberjs action event.target is undefined

+0

感谢您的重构和您的解决方案。这对我真的很有用,谢谢!!!!! – 2012-03-14 11:49:28

+0

很高兴我能帮到你。 – pangratz 2012-03-14 11:52:36

0

解决只需更换:

$(".test").click(function(){ 

由:

$(".test").on('click', function(){ 

这将注册处理程序,所有在场&未来匹配的元素...

更多信息@http://api.jquery.com/on/

+0

现场已弃用 – albertjan 2012-06-26 09:47:20

+0

谢谢。更新回答... – 2012-06-26 10:09:00