使用Ember.js中的复选框切换和绑定布尔值

时间:2014-02-25 00:03:03

标签: javascript model-view-controller ember.js ember-data

我正在尝试使用绑定复选框(true)在falsephotoApproved值之间切换,但在我的控制器代码中没有运气。

这是photos_controller.js

App.PhotosController = Ember.ArrayController.extend(

  photoApproved: ((key, value) ->
    model = @get("model")
    if value is 'undefined'
      model.get "approved"
    else
      model.set "approved", value
      model.save()
      value
  ).property("model.approved")

)

以下是template文件photos.hbs

<h1>Photos</h1>

<ul>
  {{#each controller}}
    <li class="masonry-brick">
      <h3>Approved: {{approved}}</h3>
      {{input type="checkbox" checked=photoApproved class="toggle"}}
      {{#link-to "photo" this}}{{name}}{{/link-to}}
      <img {{bind-attr src=image_url}} alt="Logo">
    </li>
  {{else}}
    <li>There are no photos.</li>
  {{/each}}
</ul>

{{outlet}}

最后,这是model

App.Photo = DS.Model.extend(
  name: DS.attr("string")
  description: DS.attr("string")
  image_url: DS.attr("string")
  approved: DS.attr("boolean")
)

如何更改我的photoApproved功能以使其正常工作?

3 个答案:

答案 0 :(得分:3)

我注意到两件事:

photoApproved是集合的属性,而不是单个模型的属性。

您应该为PhotosController定义itemController并在其中定义photoApproved

App.PhotosController = Ember.ArrayController.extend(
  itemController: 'photo'
)

App.PhotoController = Ember.ObjectController.extend(

  photoApproved: ((key, value) ->
    model = @get("model")
    if value is 'undefined'
      model.get "approved"
    else
      model.set "approved", value
      model.save()
      value
  ).property("model.approved")

)

接下来,我不明白为什么你需要定义photoApproved。当您在复选框上使用approved作为选中值时,它已经绑定到模型。 然后,您可以定义一个观察者来保存模型(但我不确定以下控制器代码是否正确)。

<li class="masonry-brick">
  <h3>Approved: {{approved}}</h3>
  {{input type="checkbox" checked=approved class="toggle"}}
  {{#link-to "photo" this}}{{name}}{{/link-to}}
  <img {{bind-attr src=image_url}} alt="Logo">
</li>

App.PhotoController = Ember.ObjectController.extend(
  approvePhoto: (->
    @get('model').save() unless @get('approved')
  ).observes("approved")
)

答案 1 :(得分:3)

Ember 2.4回答:

<input type="checkbox"
  checked="{{if info.show_in_email 'checked'}}"
  onclick={{action (mut info.show_in_email)
  value="target.checked"}} />

其中info是一个余烬模型,show_in_email是一个布尔字段。

答案 2 :(得分:0)

删除unless @get('approved')功能上的approvePhoto解决了问题。

# controller
App.PhotoController = Ember.ObjectController.extend(

  approvePhoto: ((key, value) ->
    @get('model').save()
  ).observes("model.approved")

)

# template
<li class="masonry-brick">
  <h3>Approved: {{approved}}</h3>
  {{input type="checkbox" checked=approved class="toggle"}}
  {{#link-to "photo" this}}{{name}}{{/link-to}}
  <img {{bind-attr src=image_url}} alt="Logo">
</li>