17

以下のJavascriptコードをCoffeescriptに実装したい

App.ItemView = Ember.View.extend({
    classNameBindings: ['itemId'],
    itemId: function() {
        console.log(this.get('content'));
        return "item-%@".fmt(this.get('content.id'));
    }.property('content.id'),
    templateName: 'item'    
}); 

これまでのコーヒースクリプトの内容は次のとおりです。

App.ItemView = Ember.View.extend(
    classNameBindings: ['itemId']

    itemId: ->
        console.log this.get('content')
        contentId = this.get('content.id')
        "item-#{contentId}");
    .property('content.id')

    templateName: 'item'    
)

私は得る:

Error: Parse error on line 11: Unexpected '.'

問題は のドットにあるよう.property('content.id') です。これがCoffeescriptにどのように変換されるかわかりません。このビューをCoffeescriptで適切に実装するにはどうすればよいですか?

4

3 に答える 3

42

長くなりましたが、以下のように書けばいいと思います。

App.ItemView = Ember.View.extend(
  classNameBindings: ['itemId']

  itemId: (->
    console.log this.get('content')
    contentId = this.get('content.id')
    "item-#{contentId}");
  ).property('content.id')

  templateName: 'item'    
)
于 2012-10-08T08:25:21.370 に答える
4
itemId: (->
  content = @get 'content'
  if content
    return 'item-%@'.fmt(content.get 'id')
  null
).property('content.id')

まだ定義されていない可能性のある値から、計算されたプロパティを保護する必要があります。つまり、コンテンツ オブジェクトに id プロパティが既に存在する場合、コードは問題ありません。コンテンツが定義されていない場合、その ID プロパティを検索できず、おそらく苦情が表示されます。

使用することもできます

itemId: Ember.computed(->
  ..
).property('content.id')

オブザーバーについても同様のパターンです。実際、オブザーバーも条件なしで同じことを達成します。

itemId: null

contentIdChanged: (->
  @set 'itemId', 'item-%@'.fmt(@get 'content.id')
).observes('content.id')
于 2012-10-08T18:21:27.607 に答える