我已经在 SO 上查看了所有 Backbone.js 答案,但找不到解决我的问题的答案;如果我错过了一个,请指出我。
我正在尝试获取 BackBone.js 子视图来呈现包含在其父视图呈现的 HTML 中的静态元素。我已经创建了我能说明的最简单的例子。这是HTML:
<!DOCTYPE html>
<html>
<head>
<title>Child View Not Rendering</title>
</head>
<body>
<div id="parent"></div>
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/1.8.3/jquery.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.4.4/underscore.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.0.0/backbone.js"></script>
<script src="test.js"></script>
</body>
</html>
这是test.js
Javascript:
(function () {
var Child = Backbone.View.extend({
el: '#child',
render: function () {
this.$el.html('World');
}
});
var Parent = Backbone.View.extend({
el: '#parent',
initialize: function () {
this.child = new Child();
},
render: function () {
this.$el.html('Hello <span id="child"></span>!');
this.child.render();
}
});
var parent = new Parent();
parent.render();
})();
当它运行时,我只看到"Hello !"
而不是"Hello World!"
在浏览器中看到。我究竟做错了什么?提前致谢。
更新
我找到了自己的答案(请参阅下面的“答案”),但现在我仍然想知道我的解决方案是否是最好的方法,或者我是否仍然不应该在其中创建new Child()
并Parent.initialize()
弄清楚如何让它Child.$el
像使用jQuery.live()
. 想法?
更新#2
new Child()
我找到了另一个留下in创建的答案Parent.initialize()
(请参阅下面我的“答案”中的更新)。它需要使用 jQuery 来分配.$el
属性并从中重新分配.el
属性,Child.render()
但感觉就像是 hack。我再问,有没有更好的办法?
更新#3
我能够找到一种更简洁的方式来分配.$el
财产;.setElement()
; 请在下面的答案中查看我的更新 #2。并且还在寻找更好的方法。
更新#4
找到了一种方法来创建一个封装丑陋的“父”类,尽管它不能与其他链接组合;.constructor()
在下面的答案中查看我的更新#3。我仍然想找到一个需要最少代码来扩展视图的混合策略。所以这就是我将这个问题留待解决的问题;有人有很好的答案吗?提前致谢。
更新#5
从这里开始更新#4;它会导致一系列问题。**因此,如果有人可以解决这些问题并将其作为一个不需要大量代码来混入的可行混入,我会很乐意为他们提供选定的答案。提前致谢。