【问题标题】:Rendering Ember view with helpers使用助手渲染 Ember 视图
【发布时间】:2014-12-18 11:00:45
【问题描述】:

我已阅读ember guide 以在我的 Ember 应用程序中实现相同的目标,但我做不到。

我正在尝试使用控制器配置我的视图,该控制器在两个值之间进行相乘

代码如下:

App.TotalView = Ember.View.extend({
 attributeBindings: ['value', 'placeholder'],
 placeholder: null,
 value: '',
 total: (function() {
    return this.get('newThread.selectContentTariffa') * this.get('newThread.primary');
    }).property('newThread.selectContentTariffa', 'newThread.primary')
});

在视图中:

<td>{{view "total" valueBinding=newThread.value}}</td>

我无法在这个视图中得到这个乘法的结果,这个代码是否正确?怎么了?

你可以在这里看到:http://emberjs.jsbin.com/qakado/edit

【问题讨论】:

  • 我看到了你的垃圾箱。我很困惑。而不是告诉什么是错的我可以知道你想要实现什么,以便我可以重写它。我猜你把简单的任务复杂化了。请更新您的用例
  • 我已经缩小了 jsbin 以便更清楚地看到问题emberjs.jsbin.com/qakado/edit?html,output

标签: javascript ruby-on-rails model-view-controller ember.js jsfiddle


【解决方案1】:

通过只关注您面临的问题而不是设计,并根据您提供的代码,最后有以下问题和相应的可能解决方案应用于示例,

  1. 有对 newThread 的调用,但它没有在任何地方定义 - 在控制器中创建一个 newThread

  2. 视图助手使用total,您可以创建模板并将其与App.TotalView 关联或使用视图助手的块形式 - 第一个示例使用模板,第二个使用块形式

js

App.ThreadsController=Ember.ArrayController.extend({

   selectContentTariffa: [
     {label: "180", value: "180"},
     {label: "200", value: "200"},
     {label: "300", value: "300"}
   ],

  newThread:{
    value:null,
    selectContentTariffa:null,
    primary:null
  }


});


App.TotalView = Ember.View.extend({
  templateName:"total",
 attributeBindings: ['value', 'placeholder'],
 placeholder: null,
 value: '',
 total: (function() {
    var res= parseInt(this.get('controller.newThread.selectContentTariffa')) * parseInt(this.get('controller.newThread.primary'));
   return isNaN(res)?"":res;
    }).property('controller.newThread.selectContentTariffa', 'controller.newThread.primary')
});

hbs - 示例 1

<script type="text/x-handlebars" data-template-name="threads">
    <table class="table table-bordered table-hover">
        <tr><th>Title 1</th><th>Title 2</th><th>Title 3</th></tr>

        <tr>
        <td>{{view Ember.Select prompt="Tariffa" valueBinding=newThread.selectContentTariffa content=selectContentTariffa optionValuePath="content.value" optionLabelPath="content.label"}}</td>
        <td>{{view Em.TextField type="number" valueBinding=newThread.primary class="form-control"}}</td>
        <td>{{view "total"}}</td>
        </tr>
    </table>

</script>
  <script type="text/x-handlebars" data-template-name="total">
  this is total:{{view.total}}
  </script>

hbs-example2

<script type="text/x-handlebars" data-template-name="threads">
    <table class="table table-bordered table-hover">
        <tr><th>Title 1</th><th>Title 2</th><th>Title 3</th></tr>

        <tr>
        <td>{{view Ember.Select prompt="Tariffa" valueBinding=newThread.selectContentTariffa content=selectContentTariffa optionValuePath="content.value" optionLabelPath="content.label"}}</td>
        <td>{{view Em.TextField type="number" valueBinding=newThread.primary class="form-control"}}</td>
        <td>{{#view "App.TotalView"}}t:{{view.total}}{{/view}}</td>
        </tr>
    </table>
</script>

example1 - http://emberjs.jsbin.com/falafezijo/edit?html,js

示例2 - http://emberjs.jsbin.com/cuxafigiqe/1/edit?html,js

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    相关资源
    最近更新 更多