2013-04-20 1 views
0

, когда ember.js пытается отобразить мой шаблон, содержащий следующий bindAttr. следующее исключение в handlebars.js{{bindAttr}} {{действие}} [Объект] Не имеет метода заменить

Uncaught TypeError: Object [object Object] has no method 'replace' handlebars.js:848 

связывания атр тег:

<div class="postWrapper" {{bindAttr style="display:none"}}> 

Update

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

<div {{action Toggle}} class="btn pull-right"> 
     <i class="postToggler icon-chevron-down " ></i> 
    </div> 

Обновление Полный код

Шаблон

 <script type="text/x-handlebars" data-template-name="Composer"> 
       <div class="postWrapper"> 
           <div class="postContentWrapper" {{bindAttr style="controller.display"}}> 
        <div class="row-fluid"> 
        <div class="pull-left span10"> 
             To : 
          <input id="test2" type="text" style="margin-top: 7px;width:90%" /> 
        </div> 
        <div {{action Toggle}} class="btn pull-right"> 
         <i class="postToggler icon-chevron-down " ></i> 
        </div> 
        </div> 

        <div class="row-fluid" style="height:100%" > 
        <div id="wmd-button-bar" style="width:48%;display:inline-block" ></div> 
        <div class="pull-right"> 
        <a>Hide preview</a> 
        </div> 
         <div class="wmdWrapper" style="height:80%"> 
          <div class="wmd-panel" style="vertical-align: top;"> 

           <textarea class="wmd-input" id="wmd-input" style="height: 100%;"></textarea> 
          </div> 
          <div id="wmd-preview" class="wmd-preview pull-right"></div> 
         </div> 
         <br /> 

        </div> 
        <div class="row-fluid"> 

        <div class="span6 "> 
         <p> 
          Tags : 
          <input id="test" type="text" style="width:80%"/> 
         </p> 
        </div> 
         <div class="span2 pull-right"> 
         <button id="btnSubmitPost" class="btn btn-success pull-right">{{controller.buttonText}}</button> 
         <button id="btnCanelPost" class="btn btn-warning pull-right">Cancel</button> 
        </div> 

        </div> 
        <div class="row-fluid"> 

        </div> 
        </div> 
       </div> 
     </script> 

Просмотр и визуализации

 /* 
     MODES 
      NEW 
      REPLY 

     */ 
     Thoughts.ComposerController = Ember.Object.extend({ 
      mode: 2, 
      visible: false, 
      messageContent: "", 
      buttonText: function() { 
       switch (this.get("mode")) { 
        case 1: return "Post"; 
        case 2: return "Reply"; 
       } 
      }.property(), 

      display: function() { 
       if (this.get("visible")) { 
        return 'display:block'; 
       } else 
        return 'display:none'; 
      }.property(), 

      Toggle: function(){ 
       console.log('Helllo'); 
       } 
     }); 

     Thoughts.ComposerController = Thoughts.ComposerController.create(); 

Информация об ошибках

объект дамп

  string: "data-ember-action="1"" 
      __proto__: Object 
      constructor: function (string) { 
      toString: function() { 
      __proto__: Object 

Сбои по методу замены, так как метод замены не определен

Handlebars.Utils = { 
    escapeExpression: function (string) { 
     // don't escape SafeStrings, since they're already safe 
     if (string instanceof Handlebars.SafeString) { 
      return string.toString(); 
     } else if (string == null || string === false) { 
      return ""; 
     } 

     if (!possible.test(string)) { return string; } 
     ----> return string.replace(badChars, escapeChar); 
    }, 

ответ

0

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

все я сделал замену Тлеющих и рули JS файлов, а код работает отлично теперь благодаря

0

Итак, прежде всего вам нужно определить только нужно определить контроллер. Вам не нужно создавать экземпляр. Ember сделает это для вас при инициализации приложения.

Если вы определяете свойство, которое наблюдает другое, другими словами, его значение зависит от другого, вам нужно это указать в качестве параметра для вспомогательного помощника property.

Thoughts.ComposerController = Ember.Controller.extend({ 
    mode: 2, 
    visible: false, 
    messageContent: "", 

    buttonText: function() { 
     switch (this.get("mode")) { 
      case 1: return "Post"; 
      case 2: return "Reply"; 
     } 
    }.property('mode'), 

    display: function() { 
     return 'display:' + this.get('visible') ? 'block' : 'none'; 
    }.property('visible'), 

    Toggle: function() { 
     this.toggleProperty('visible'); 
     this.set('mode', this.get('mode') == 2 ? 1 : 2); 
    } 
}); 

Шаблон сам по себе действителен.

Вы можете получить эту работу, создав композитора маршрут, как это:

this.route('composer'); 

или представляя его в другом шаблоне, как это:

{{render 'composer'}} 

Это должно быть ответом на ваш вопрос. BUT

Не было бы лучше использовать {{if}} помощник для показа содержимого внутри шаблона на основе состояния?

+0

вы, я просто использовать это в качестве примера на дисплее будет изменяться в зависимости от состояния из контроллер, но он не работает со статическими или динамическими и генерирует одно и то же исключение – Billybonks

+0

Как вы скомпилировали свой шаблон? У вас больше кода для показа? – Myslik

+0

его все довольно по умолчанию я связал код – Billybonks

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