2017-08-11 11 views
1

私はVueの$のcreateElementコードにhttp://element.eleme.io/#/en-US/component/tree#custom-node-contentでの例からJSXコードを変換しようとしている

元のコードスニペット:

renderContent(h, { node, data, store }) { 
    return (
     <span> 
     <span> 
      <span>{node.label}</span> 
     </span> 
     <span style="float: right; margin-right: 20px"> 
      <el-button size="mini" on-click={() => this.append(store, data) }>Append</el-button> 
      <el-button size="mini" on-click={() => this.remove(store, data) }>Delete</el-button> 
     </span> 
     </span>); 
    } 
} 

と変換するための私の試み:

renderContent (h, { node, data, store }) { 
    return h('SPAN', [ 
     h('SPAN', [h('SPAN', node.label)]), 
     h('SPAN', {attrs: {style: 'float: right; margin-right: 20px'}}, [ 
     h('el-button', { attrs: { size: 'mini', on: { click: this.append(store, data) } } }, 'Append'), 
     h('el-button', { attrs: { size: 'mini', on: { click: this.delete } } }, 'Delete') 
     ]) 
    ]) 
    } 

が、それは失敗します。常にすべてのノードのレンダリングとは決して後の時点で実行さAppendボタンを。ボタンDeleteはまったく実行されません。

したがって、引数を持つイベントハンドラを作成された要素に適切に渡すにはどうしたらいいですか?

答えて

2

これは、コンテンツをレンダリングするときに実際にappend関数を呼び出すためです。

{ 
    attrs: { size: 'mini' }, 
    on: { click: this.append.bind(this, store, data) } 
} 

またはJSXスニペットと同じソリューションを使用する:この試してみてくださいどちらの方法

{ 
    attrs: { size: 'mini' }, 
    on: { click:() => this.append(store, data) } 
} 

をクリックイベントが発生したときに呼び出される関数を提供します。

onのキーはattrsに兄弟であり、内部ではないことに注意してください。

+0

エラー:レンダリング関数のエラー: "TypeError:未定義のプロパティ 'bind'を読み取ることができません。 2番目 - エラーはありません。何もしません。 – htonus

+0

これは奇妙です。 .append(store、data) 'はあなたのコードでエラーをスローしませんか? –

+0

あなたは正しく機能名を間違って入力しました。したがって、エラーやイベントハンドラはトリガされません。それから、もう一度ドキュメンテーションをチェックし、 'on 'キーを間違った場所に置くことを知った。固定後 - すべて正常に動作します。どうもありがとうございます! – htonus

関連する問題