0

ビューとモデルを処理するためにバックボーン js を使用していますが、ASP.NET MVC で Html.EditorFor を使用してテンプレートをレンダリングしたいと考えています。これは、フォームが C# クラスに基づいて動的に作成されるためです。JavaScript テンプレートのアンダースコアのみを試しましたが、このような値フィールドにマークアップが必要であり、<%=heading%>それは私にとってオプションではありません。各フォーム コンポーネントの名前を使用してフォームをマップできるテンプレート エンジンが必要です。または、サーバーと js テンプレート エンジンの両方で機能する同じマークアップをレンダリングできる他のビュー エンジンが必要です。

アップデート

私の見解では、次のように Html.EditorFor を使用しています。

@foreach (var type in Html.GetAvailablePageModels()) {
    var content = Activator.CreateInstance(type) as IContent;
    <script id="view-template-@type.Name" type="text/html">
        @using (Html.BeginForm()) {
            @Html.EditorFor(x => content)
            <input type="submit" value="Save"/>
        }
    </script>
}

それから私のバックボーンビューでは、私は次のようなことをしています:

var PageModel = Backbone.Model.extend({
    urlRoot: '/api/page'
});
var page = new PageModel({ id: 'articles/85' });
page.fetch();

var EditView = Backbone.View.extend({

    el: $('div#main'),

    initialize: function () {
        this.template = _.template($('#view-template-Article').html());
        this.render();
    },

    render: function () {
        $(this.el).html(this.template(this.model.toJSON())); // <-- set the values correct in my pre rendered form
        return this;
    }

});

window.editView = new EditView({ model: page });

モデルをテンプレートにバインドする上記のコードでは、heading というフィールドが name="heading" の正しいフォーム フィールドにバインドされていることを確認する必要があります。

4

1 に答える 1

1

アンダースコア テンプレートの動作を変更します。


_.templateSettings = {
  interpolate : /\{\{([\s\S]+?)\}\}/g
};

これで、次のような HTML テンプレートを作成できます。

This is a message: {{message}}

<%= message %>古い学校のスタイルの代わりに。これにより、サーバー上の Razor ビューから必要なテンプレートを生成できます。私はプロジェクトで一度これを行いましたが、それは本当にうまくいきました.

于 2013-03-19T03:26:34.823 に答える