1

我如何在需要的backbone.js结果中产生这个结果<p><h3>fgfdgdfg</h3></p>

var TodoView = Backbone.View.extend({
    el:'p',
    render: function () {
        $('body').append(this.$el.html("<h3>fgfdgdfg</h3>"));
    }
});

var todoView = new TodoView();
todoView.render();
4

2 回答 2

6

使用tagName而不是el.
编辑以修复错误的 html,感谢 @muistooshort<p>干脆删掉了。

var TodoView = Backbone.View.extend({

    tagName:'h3',
    render: function () {
        $('body').append(this.$el.html("fgfdgdfg"));
    }

});

var todoView = new TodoView();
todoView.render();

您设置el是否存在您希望视图使用的现有 DOM 元素。设置tagName告诉 Backbone 为视图的根生成一个 'h3' 元素。

你也可以这样做(我更喜欢这种方式;避免设置'el'):

var TodoView = Backbone.View.extend({

    tagName:'h3',
    render: function () {
        this.$el.html("fgfdgdfg");
        return this;
    }

});

// view is more reusable now, since it doesn't have the 'body' part in render.
// So, another instance could be rendered and added to the page somewhere else.
var todoView = new TodoView();
$('body').append(todoView.render().el);
var todoView2 = new TodoView();
$('body').append(todoView2.render().el);

如果你的 html 已经有你想要用于视图的 'h3' 元素,你可以这样做:

// assuming this html on the page already:
// <body><h3></h3></body>
var TodoView = Backbone.View.extend({

    // setting 'el' tells backbone to use the existing <h3>.
    // You probably would want to use an id rather than 'h3' though.
    el:'h3',
    render: function () {
        this.$el.html("fgfdgdfg");
        return this;
    }

});

var todoView = new TodoView();
todoView.render();
于 2013-02-25T18:27:01.447 回答
2

您可能不能,因为<p><h3>fgfdgdfg</h3></p>它不是有效的 HTML,并且浏览器经常会尝试更正无效的 HTML。

精细<p>规范

允许的内容

措辞内容

措辞内容是:

措辞内容

由与普通字符数据混合的短语元素组成。

普通字符数据或多或少只是没有标记的纯文本,因此<h3>不会在那里。短语元素是简单的东西,如<a>,<b>,<img>, ... 也没有<h3>

如果您想要一致的结果,则必须修复您的 HTML。然后,一旦您记住了有效的 HTML,Paul 的建议应该可以完成。

于 2013-02-25T18:49:13.847 回答