2013-08-03 3 views
0

Я получаю в борьбу с ember.js, но могли бы сделать с некоторыми советами ...Ember.js - как получить ширину элемента?

Я хотел бы создать представление, которое является ДИВ с ул вложенной в него. Перед рендерингом я хотел бы посмотреть, насколько широка родительская div есть и рассчитать, сколько li, чтобы добавить в ul с петлей для петли.

Не могли бы вы предложить лучший способ сделать это, потому что я борется!

Cheers!

ответ

1

Не знаю много о вашем коде, вот очень быстрый и простой пример. Надеюсь, это даст вам несколько указателей, и вы сможете приспособить их.

Идея состоит в том, чтобы использовать событие didInsertElement в представлении, которое вызывается, когда оно было вставлено в DOM, тогда вы можете получить объект JQuery этого DIV с this.$().

App.SomeKindOfView = Ember.View.extend({ 
    //-snip- 
    didInsertElement: function() 
    { 
    this._super(); 
    var parentWidth = this.$().parents('div').width(); 
    //do some fancy caculation with parentWidth 
    //then save the result on the View or Controller... 
    } 
    //-snip- 
}); 

В шаблоне вы можете иметь что-то вроде (так как это по умолчанию обернут в DIV:

<ul> 
    {{#each item in controller}} 
    <li>{{item.someContent}}</li> 
    {{/each}} 
</ul> 
+0

Снова, хороший. Использование didInsertElement - так как теперь очевидно, что он не существует на странице, прежде чем это вызвано! Кстати, какова цель this._super()? – user1403158

+0

super вызывает ту же функцию в родительском классе. при расширении Ember.View это не имеет большого значения, но если вы расширяете представление, у которого есть свой собственный makeInsertElement, вам придется вызвать супер, чтобы он был выполнен тоже. – colymba

2

Способ определения width в виде view бы зацепив в didInsertElement

App.IndexView = Ember.View.extend({ 
    willInsertElement: function() { 
    console.log(this.$().css('width')); 
    }, 
    didInsertElement: function() { 
    console.log(this.$().css('width')); 
    } 
}); 

Для вашего случая использования более актуальна willInsertElement, потому что она будет называться перед didInsertElement, но width пока еще не рассчитан.

Для примера сыграйте jsbin.

Надеюсь, это поможет.

+0

Cheers чувак. Я узнал после публикации моего вопроса, что вы можете использовать jQuery для элемента с didInsertElement, так как теперь очевидно, что он не существует на странице до того, как это вызвано! – user1403158

Смежные вопросы