在 Ember 2.0 - Rails 4 上弃用了 {{view}}

Deprecated {{view}} on Ember 2.0 - Rails 4

我最近更新了一个 Rails 3.2Rails 4.1.0

我有 ember.js 用于数据绑定。

这是我的Gemfile

source 'https://rubygems.org'

#gem 'rails', '3.2.12'
gem 'rails', '4.1.0'

# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'


# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails'
  gem 'coffee-rails'
  gem 'zurb-foundation'

# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', :platforms => :ruby

  gem 'uglifier'
end

gem 'jquery-rails'

group :development do
  gem "better_errors"
  gem 'annotate'
  gem 'pry'
  gem 'sqlite3'
end

group :production do
  gem 'pg'
end

gem 'ember-rails'
gem 'ember-source'
gem 'handlebars-source'
gem 'active_model_serializers'
gem 'filepicker-rails'
gem 'execjs','2.5.2'
gem 'therubyracer'

gem 'thin'
gem 'unicorn'
gem 'capistrano'
gem 'simple_form'
gem 'devise'

# To use ActiveModel has_secure_password
# gem 'bcrypt-ruby'

# To use Jbuilder templates for JSON
# gem 'jbuilder'

# Use unicorn as the app server
# gem 'unicorn'

# Deploy with Capistrano
# gem 'capistrano'

# To use debugger
# gem 'debugger'

# File upload extension
gem "paperclip"

# Admin
gem 'activeadmin', '1.0.0.pre1'

我以前从未遇到过这个弃用问题,当时是 Rails 3.2

现在每次我 运行 应用程序都会抛出此错误:

Barber::PrecompilerError at /
. Compiler said: Error: Assertion Failed: Using `{{view}}` or any path based on it ('_lineItem' @ L1:C0) has been removed in Ember 2.0

我对 ember 还很陌生,所以我对这个有点迷茫。

升级我的 Rails 版本后才发生。

这是有问题的文件:

_lineitem.hbs
{{#view 'lineItem' content='lineItem' class='row collapse'}}
<div class="name columns">
  <h6>{{lineItem.name}}</h6>
</div>
<div class="qty text-right columns">
  <h6>qty: {{lineItem.quantity}}</h6>
</div>
{{#if editing}}
  <div class="taxable columns text-right">
    taxable {{view 'checkbox' checked="lineItem.product.taxable"}}
  </div>
{{/if}}
<div class="line-total columns">
  <h6>
    {{#if editing}}
      {{input value="lineItem.priceCents"}}
    {{else}}
      <span class='money'>
        ${{money-display lineItem.lineItemTotalCents}}
      </span>
    {{/if}}
  </h6>
</div>
<div class="edit columns text-right">
  <button class="button small"{{action 'removeLineItem' lineItem target="view"}}>-</button>
</div>
{{/view}}

可能还有一些其他文件有这种声明{{view}}

拜托,有什么想法吗?

提前致谢!

由于您使用的是 Ember 2.0,我建议将您的视图转换为组件文件夹中名为 line-item.hbs 的组件,该组件具有以下内容:

<div class="name columns">
  <h6>{{lineItem.name}}</h6>
</div>
<div class="qty text-right columns">
  <h6>qty: {{lineItem.quantity}}</h6>
</div>
{{#if editing}}
  <div class="taxable columns text-right">
    taxable {{view 'checkbox' checked="lineItem.product.taxable"}}
  </div>
{{/if}}
<div class="line-total columns">
  <h6>
    {{#if editing}}
      {{input value="lineItem.priceCents"}}
    {{else}}
  <span class='money'>
    ${{money-display lineItem.lineItemTotalCents}}
  </span>
{{/if}}
  </h6>
</div>
<div class="edit columns text-right">
  <button class="button small"{{action 'removeLineItem' lineItem target="view"}}>-</button>
</div>

然后在你的模板文件中应该使用 lineItem

{{line-item item=lineItem}}

您可以通过 ember 插件或配置值打开旧版视图。

https://github.com/emberjs/ember-legacy-views

插件设置了一些配置值和视图将会返回。 然后你有时间迁移到组件。

同样的方法适用于遗留控制器(ArrayController 等)