вызов функции с аргументом объекта ember с attr-привязкой

#javascript #ember.js

#javascript #ember.js

Вопрос:

У меня проблемы с пониманием шаблонов embers.

Итак, у меня есть этот объект, который присваивается модели IndexRoute:

 App.Session = Ember.Object.extend({
  function_without_argument: function () {
    return 'http://www.veryicon.com/icon/png/Flag/Rounded World Flags/Spain Flag.png';
  }.property(),

  with_argmument: function (value){
    return 'http://www.veryicon.com/icon/png/Flag/Rounded World Flags/'   this.get(value)   ' Flag.png';
  }.property()
});
 

вызов <img width="20" {{bind-attr src=function_without_argument}}> работает, но не с аргументом <img width="20" {{bind-attr src="with_argmument answer.leader"}}> .

Почему?

Я сделал небольшой пример codepen: http://codepen.io/gurix/pen/zmdDh

Ответ №1:

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

Пример,

http://codepen.io/anon/pen/ghnsD

js

 App = Ember.Application.create();

App.Router.map(function() {
  // put your routes here
});

App.Session = Ember.Object.extend({
  targetFlag:null,
  function_without_argument: function () {
  return 'http://www.veryicon.com/icon/png/Flag/Rounded World Flags/Spain Flag.png';
  }.property(),

  answer_image: function (){
    return 'http://www.veryicon.com/icon/png/Flag/Rounded World Flags/'   this.get("answer.leader")   ' Flag.png';
  }.property()
});


App.IndexRoute = Ember.Route.extend({
  model: function() { 
    var session = App.Session.create();
    session.setProperties({ 
      token: 'abc',
      answer: {
        leader: 'Switzerland',
        looser: 'Argentina'
      }});
    return session;}
});
 

hbs

 <script type="text/x-handlebars">
  <h2>Welcome to Ember.js</h2>

  {{outlet}}
</script>

<script type="text/x-handlebars" data-template-name="index">

  without argument: <img {{bind-attr src=function_without_argument}}>

     {{answer.leader}} becomes the image ... 

    <img {{bind-attr src=answer_image}} >



</script>
 

Комментарии:

1. Спасибо за ваш комментарий, но это не решает мою проблему ни в малейшей степени. Итак, вы говорите, что невозможно передать параметр свойству объекта? Итак, я должен создать объектный метод, подобный leader_image для каждого ответа? Разве нет лучшего способа?

2. @MarkusGraf Вы вообще не должны передавать параметр. Это не имеет смысла. melc прав. Src изображения должен быть свойством Session объекта (либо заданным во время инициализации, либо вычисленным), а не результатом какой-либо шаблонной логики, которая передает параметр.

3. хорошо, я понимаю. Итак, я думаю, мне нужно больше узнать о философии ember. Я думал, что это будет простой способ вместо написания методов для каждого изображения.