【问题标题】:JavaScript template engine that maps HTML-forms based on name基于名称映射 HTML 表单的 JavaScript 模板引擎
【发布时间】:2023-03-09 17:56:01
【问题描述】:

我正在使用主干 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 });

在上面我将模型绑定到模板的代码中,我需要确保名为 header 的字段绑定到 name="heading" 的正确表单字段。

【问题讨论】:

  • 我可能会看一下 Backbone.Stickit 之类的东西,因为您可能希望 2 路绑定到模型?

标签: javascript backbone.js asp.net-mvc-4 template-engine


【解决方案1】:

改变下划线模板的工作方式:


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

现在你可以像这样编写 HTML 模板了:

This is a message: {{message}}

而不是老式的&lt;%= message %&gt; 风格。这将允许您从服务器上的 Razor 视图生成所需的模板。我曾经在一个项目中这样做过,效果非常好。

【讨论】:

  • 这似乎很好用!你是如何让你的 Razor 视图呈现正确的 HtmlFieldName 的?如果我在我的视图中使用 之类的东西,结果会打印如下: 但我的 JSON 包含不包含内容前缀。有没有办法自动删除前缀还是我需要手动删除?
  • 老实说,我不记得了。那是一年多以前的事了,从那以后我就再也没有使用 .net / razor 工作过……抱歉
  • 好的,我会就此提出一个新问题。感谢您的帮助!
猜你喜欢
  • 2012-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-23
  • 2016-05-15
  • 1970-01-01
  • 2017-07-12
相关资源
最近更新 更多