4

Я чувствую, что, возможно, я делаю много для простой проблемы.Приращение Emberjs в шаблоне

Если index = 0, как я увеличиваю index в шаблоне.

В идеале, я хотел бы сделать что-то подобное.

{{index+1}} 

Из чего я понимаю, решение состоит в том, чтобы написать вспомогательную функцию, такую ​​как следующее.

import Ember from 'ember'; 

export function plusOne(params) { 
    return parseInt(params) + 1; 
} 

export default Ember.HTMLBars.makeBoundHelper(plusOne); 

А затем в шаблоне вы сделаете следующее.

{{plus-one index}} 

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

Любые рекомендации по этому вопросу будут очень признательны.

Спасибо!

+0

Каков ваш прецедент для индекса в шаблоне @ user2517182 – Sushant

+1

'И возможно более простой способ сделать« простую »обработку в шаблоне.« Это было бы не так. Шаблоны ручек были спроектированы так, чтобы быть безболезненными. Вы должны выполнять любую обработку в своем коде. – GJK

+0

Если у вас есть 'stuff []', и вы хотите отобразить 1 рядом с 'stuff [0]' в своем шаблоне, тогда 2 рядом с 'stuff [1]', ect ... – user2517182

ответ

6

Короткий ответ: нет. В шаблонах нет никакой реальной вычислительной логики. Помощник - ваш лучший выбор для добавления 1 к индексу внутри шаблона.

Конечно, было бы интересно узнать, почему вы хотите добавить +1 к любому индексу? возможно, чтобы обозначить ваши итерации ненужным способом? в таком случае вы бы не отобразили упорядоченный список?

<ol> 
    {{#each model as |foo|}} 
    <li>{{foo.bar}}</li> 
    {{/each}} 
</ol> 

Результирующее в:

  1. Я Foo
  2. Я Foo тоже!
  3. Я три три!

другая возможность это (как альтернатива использованию помощника для каждого индекса)

model: ['Foo', 'Man', 'Chu'] 

foosWithCount: Ember.computed.map('model', function(foo, index) { 
    return Ember.Object.create({ 
    name: foo, 
    count: index + 1 
    }); 
}); 

затем

{{#each foosWithCount as |foo|}} 
    <p>I'm {{foo.name}} and I'm #{{foo.count}}</p> 
{{/each}} 

Итоговое в:

Я Foo и я # 1

Я мужчина и я # 2

Я Чу и я # 3

+0

Спасибо за ваш ответ. Я думаю, что упорядоченный список может быть немного ограниченным. Я не мог сделать что-то вроде 'foo - 1 в массиве',' foo тоже! это 2 в массиве ',' foo three! 3 в массиве. Но я думаю, именно поэтому есть помощники. :-) – user2517182

+1

С Ember 1.11 вы можете сделать '{{#each model as | foo index |}}', чтобы получить текущий индекс цикла. – GJK

2

Если вам необходимо получить доступ к индексу в использовании каждого блока:

<ul> 
    {{#each model as |foo index|}} 
    <li>{{index}} : {{foo.bar}}</li> 
    {{/each}} 
</ul> 

см.: This Answer

Затем вы можете использовать вспомогательный шаблон для преобразования из индекса в позицию.

JSBin Example

3

Обучаясь Ember, я боролся много с этим вопросом тоже. Я создал gist, показывающий вам, как это можно сделать, используя очень простой хелпер-метод Handlebars.

https://gist.github.com/makabde/7d38d09d28b2a167b003

И тогда все, что вам нужно сделать, это вызвать этот помощник с {{your-helper-method index}}; он должен затем выводить индекс, увеличиваемый на 1, или любой инкремент, который вы установили в своем вспомогательном методе.

+0

Это действительно решило проблему, я не знаю, почему она не выше. Это лучше, чем любое другое решение. Спасибо за ваш смысл, спасли меня много времени! –

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