运行

2014-02-11 20 views
1

过程中改变高度和Ember.ListView的宽度按照README我应该能够改变Ember.ListView的宽度和高度,但我不能找到一个方法来得到它的工作。运行

当我放大ListView的尺寸我希望创建并添加到列表中的新项目,但它不会发生。

没有人对此有一个工作的例子吗?

UPDATE:

见本fiddle为一个代码示例。

+0

你能提供一个jsFiddle吗? – chopper

+0

对不起。现在包含示例。 – bazzel

回答

1

我解决它......

看到这个fiddle更新的样本。

我最初的ListView定义的didInsertElement方法绑定到窗口的resize事件并更新ListItem的宽度和高度,但这样一来我显然推翻了ListItem自己didInsertElement方法:

App.ListView = Ember.ListView.extend({ 
     height: 500, 
     width: 500, 
     elementWidth: 80, 
     rowHeight: 20, 
     itemViewClass: Ember.ListItemView.extend({ 
      templateName: 'row_item' 
     }), 
     adjustLayout: function(w, h) { 
      console.log(w, h); 
      this.set('width', w); 
      this.set('height', h); 
     }, 
     didInsertElement: function() { 
      view = this; 
      $(window).resize(function() { 
       width = $('body').width(); 
       height = $('body').height(); 
       view.adjustLayout(width, height); 
      }); 
     } 

通过使用.on('didInsertElement')代码工作:

App.ListView = Ember.ListView.extend({ 
     height: 500, 
     width: 500, 
     elementWidth: 80, 
     rowHeight: 20, 
     itemViewClass: Ember.ListItemView.extend({ 
      templateName: 'row_item' 
     }), 
     adjustLayout: function(w, h) { 
      console.log(w, h); 
      this.set('width', w); 
      this.set('height', h); 
     }, 
     observeResize: function() { 
      view = this; 
      $(window).resize(function() { 
       width = $('body').width(); 
       height = $('body').height(); 
       view.adjustLayout(width, height); 
      }); 
     }.on('didInsertElement') 
+0

你应该换行代码处理resize事件中'Ember.run',以避免自动运行。 –

+0

感谢卢克,我将它转换成一个混合https://gist.github.com/bazzel/8962240/raw/4cf738cdce5ecbe04c217a2a81aaed5bd1bcc7c7/ember-list-view.js.coffee – bazzel