1

単一ページのサイトに Backbone.js、Require.js、および Underscore.js を使用しています。

サブビューの入れ替えを処理するコンテナ ビューがあります。

サブビューの 1 つで、HTML テンプレートのレンダリングがいつ終了するかを知る必要があります。理由は次のとおりです。サブビュー (view_subview.html) の HTML テンプレートには、iframe とフォームが含まれています。

<iframe name="myIFrame" id="myIFrame"></iframe>

<form action="http://myendpt.com/do" method="get" id="myForm" target="myIFrame">
    <input type="hidden" name="param1" value="value1"/>
</form>

フォームを送信すると、myendpt.com/do が iframe に表示されるコンテンツの生成を処理します。

ロードされたらフォームを送信できるように、タイミングを把握しようとしています。

私のサブビューは次のようになります。

define([
    'jQuery',
    'Underscore',
    'Backbone',
    'config',
    'text!templates/view_subview.html'
], function ($, _, Backbone, Config, tpl) {
    var SubView = Backbone.View.extend({

        template: _.template(tpl),

        initialize: function () {
        },

        render: function (eventName) {
            $(this.el).html(this.template({config: Config}));
            $('#myForm').submit();
            return this;
        },
    });
    return SubView;
});

render() の $('#myForm').submit() 呼び出しは、実際にはフォームを送信しません。これはおそらく、HTML がまだロード中で、ドキュメントがまだ準備できていないためです。

$('#myForm').submit() 呼び出しをコンテナー ビューに移動すると、機能させることができますが、SubView がフォームの送信を所有するようにしたいと考えています。私のコンテナー ビュー (およびその他の無関係なサブビュー) は、SubView で何が起こるかを知ったり気にしたりする必要はありません。

送信を呼び出すことができるように、HTML が完全に読み込まれていることを SubView (および SubView のみ) で検出する最良の方法は何ですか?

4

1 に答える 1

1

iframe が読み込まれて準備ができたら、イベントを発生させませんか? レンダリング関数はそのイベントにバインドできます。次の行だけで何か:

render: function(eventName){
    $(this.el).html(this.template({config:Config})
        .bind('formReady',function(){
             $('#myForm',this.el).submit();
        })
    return this;
}

そして、iframe に onload イベントを発生させるだけです。

<iframe onload='$(this).trigger('formReady');' .... >
于 2012-07-15T08:38:22.740 に答える