bem / project-stub

deps
313 stars 198 forks source link

Cannot read property 'url' of undefined for process.env.BEMHTML_ENV = 'development'; #54

Closed voischev closed 10 years ago

voischev commented 10 years ago

Скачиваю проект по инструкции.

Делаю блок из примера.

block('link')(
  tag()('span'),
  match(this.ctx.url)(
     tag()('a'),
     attrs()({ href: this.ctx.url }),
     mode('reset')(
         attrs()({ href: undefined })
      )
   )
)

в index.bemjson.js подключаю

{
            block: 'link',
            content: 'block test',
            url: "test"
 },

в make.js

process.env.BEMHTML_ENV = 'development';

Пробую собрать / запустить чере bem server bem make -m clean && bem make

Выдает ошибку TypeError: Cannot read property 'url' of undefined

tadatuta commented 10 years ago

попробуй завернуть в анонимную функцию:

attrs()(function() { return { href: this.ctx.url }; }),
voischev commented 10 years ago

@tadatuta да в функции работает. Дока смутила. Чем обусловлено такое поведение в дев режиме?

tadatuta commented 10 years ago

в доке http://ru.bem.info/libs/bem-core/2.0.0/bemhtml/reference/ про это есть абзац начиная со слов «NB Необходимость оборачивать блок JavaScript-кода в безымянную функцию».

процитирую ответ @narqo об этом: В dev-режиме шаблоны же тупо конкатенируются (быстрая компилляция, отладка того, что написал и пр. прелести). Поэтому в цепочке:

block('blah').match(this.ctx.blah === 'blah')

сначала всегда выполнится условие this.ctx.blah === 'blah', а потом его результат передастся в match. Все как в обычном JS: (K.O. ;)

http://jsbin.com/OXovUYEF/1/edit?js,console