Вопрос:

This.data из # каждой итерации

meteor meteor-blaze spacebars

9 просмотра

1 ответ

13 Репутация автора

Я пытаюсь получить доступ к значению внутри {{#each in}} - итерации:

{{#each room in channels}}
  <form class="enterRoom">
    <button type="submit" class="roomJoin">
      <b>{{room.name}}</b>  
        <img src="{{room.roomBanner}}" alt=".">
           <input type="hidden" value="{{room.name}}" name="name">
         </button>            
          <div class="inRoom"> 
           {{#each name in room.inRoom}} 
              <a href="/c/{{name}}" target="_blank">{{name}}</a> 
           {{/each}}
          </div> 
  </form>
{{/each}}

Обычно я бы использовал this.name, например, чтобы получить его имя внутри события, чтобы использовать его дальше, например, так

'submit .enterRoom'(event) {
  event.preventDefault();

  const isClosed = this.name; // room.name example here

   }

Но это не работает в этом сценарии. То, что я пробовал раньше, было:

  • room.name
  • this.room.name

Но те дают ту же ошибку

chat.js:86 Uncaught ReferenceError: room is not defined
    at Object.submit .enterRoom (chat.js:86)
    at blaze.js?hash=51f4a3bdae106610ee48d8eff291f3628713d847:3818
    at Function.Template._withTemplateInstanceFunc (blaze.js?hash=51f4a3bdae106610ee48d8eff291f3628713d847:3769)
    at Blaze.View.<anonymous> (blaze.js?hash=51f4a3bdae106610ee48d8eff291f3628713d847:3817)
    at blaze.js?hash=51f4a3bdae106610ee48d8eff291f3628713d847:2617
    at Object.Blaze._withCurrentView (blaze.js?hash=51f4a3bdae106610ee48d8eff291f3628713d847:2271)
    at Blaze._DOMRange.<anonymous> (blaze.js?hash=51f4a3bdae106610ee48d8eff291f3628713d847:2616)
    at HTMLFormElement.<anonymous> (blaze.js?hash=51f4a3bdae106610ee48d8eff291f3628713d847:863)
    at HTMLDivElement.dispatch (modules.js?hash=8331598f8baf48556a442a64933e9b70b778274a:9685)
    at HTMLDivElement.elemData.handle (modules.js?hash=8331598f8baf48556a442a64933e9b70b778274a:9492)

Может ли кто-нибудь объяснить мне, как я мог бы сделать это в {{каждый в}} - настройке правильно?

Автор: TKur Источник Размещён: 10.08.2019 05:52

Ответы (1)


0 плюса

4711 Репутация автора

Ошибка не имеет ничего общего с eachитерациями вашего шаблона. Вы пытаетесь получить данные формы в submitдескрипторе события. Тем не менее, нет контекста, связанного с thisили room.

Чтобы получить стоимость комнаты, вам нужно получить доступ к входному значению.

Blaze предлагает быстрый способ сделать это, используя встроенный в шаблон jQuery (using templateInstance.$), который автоматически устанавливает область корня шаблона вместо всего документа:

'submit .enterRoom'(event, templateInstance) {
  event.preventDefault();
  const roomName = templateInstance.$(event.currentTarget).find('input[name="name"]').val();
  // ...
}
Автор: Jankapunkt Размещён: 11.08.2019 08:12
Вопросы из категории :
32x32