1

ビューを使用してモデル属性を表示するときに、ルート内のモデル データにアクセスする方法を探しています。

テンプレート

<h2>New post</h2>

<form {{action save model on="submit"}}>
    <label>Title</label>
    {{input type="text" value=title placeholder="title" id="title"}}

    <label>Text</label>
    {{view "tinymce" value=text }}

    <button>Post</button>
 </form>

テンプレートを表示

<textarea id="tinymce">
</textarea>

意見

export default Ember.View.extend({
    templateName: 'views/tinymce-textarea',

    didInsertElement: function() {
        tinymce.EditorManager.execCommand('mceRemoveEditor',true, 'tinymce');
        tinymce.EditorManager.execCommand('mceAddEditor',true, 'tinymce');
    }
});

ルーター

export default Ember.Route.extend({

    ....

    actions : {
        save : function(model) {
            if (!model.get('title').trim() || !model.get('text').trim()) {
                return;
            }

            model.save().then(this.onSuccessfulSave.bind(this), this.onFailedSave.bind(this));
        }
    }
});

model.text がビューにバインドされていないため、textarea テンプレート ヘルパーを使用した場合のように、明らかにこれは機能しません。

{{textarea value=text placeholder="text" id="text"}}

しかし、これは私がこれを機能させようとした多くの (多くの) 方法の 1 つにすぎず、ビューを使用するときにルート内のモデル属性にアクセスする方法について完全に途方に暮れています。そして、それは私にとってもかなり一般的なユースケースのようです.

私はこれに関する情報をSOや他の場所で見つけることができなかったので、誰かが私を助けることができれば、事前に感謝します! / なので。

4

1 に答える 1

0

したがって、見逃している主なものの 1 つは、ビューをコントローラーにバインドすることです。これは実際には非常に簡単ですが、これがないと、Ember は 2 つの間で変更を伝達する必要があることを認識できません。私が最初にすることはこれです:

 {{view "tinymce" valueBinding="text" }}

これは、ビューの値がコントローラーのテキスト値にバインドされることを示しています。ビューの値が更新されるたびに、コントローラーに伝達され、その逆も同様です。

次に対処する項目は、実際にビュー内の値をバインドすることです。必要なのは、入力の値をビューの値にバインドするように入力に指示することだけです。これはこのように行うことができます

{{textarea value="view.value" placeholder="text" id="text"}}

これを試してみてください。例として作成したこの jsbin を使用できます。

http://emberjs.jsbin.com/qanudu/26/

他にご不明な点がございましたら、お気軽にお問い合わせください。これで問題が解決するはずです。

于 2014-08-11T18:59:32.373 に答える