我是backbone.js和JavaScript的noob在這方面......我試圖用Jquery和backbone.js構建一個簡單的小部件系統,但我似乎無法弄清楚如何獲得多個我的視圖實例呈現。然而,我可以得到一個實例來渲染......我的最終目標是建立一個系統,在這個系統中,我可以點擊一個按鈕,並讓它每次在屏幕上渲染一個新的小部件。 這裏是我的代碼:爲什麼我無法獲得兩次我的視圖渲染?
<script type="text/template" id="widget-template">
<div class="widget-wrap">
<div class="widget-header">
<span class="widget-title"><%= widgetInfo.get('title') %></span>
<span class="widget-close"></span>
<span class="widget-hide"></span>
<span class="widget-expand"></span>
</div>
<div class="widget-container">
<!-- this is where the widget content goes -->
</div>
</div>
</script>
<script typ="text/javascript">
var baseWidget = Backbone.Model.extend({
defaults: {
title: "Base",
author: "AB",
multipleInstances: false,
description: "This is the base widget",
pathToIcon: "",
state: "Open",
position: {left:0, top:0}
}
});
var widgetCollection = Backbone.Collection.extend({
model: baseWidget
});
var widgetcol = new widgetCollection();
var baseView = Backbone.View.extend({
el: '.wraper',
render: function(pos = {left:0, top:0}) {
var widget = new baseWidget();
widgetcol.add(widget);
console.log(widgetcol.length);
widget.set({'position':pos})
var template = _.template($('#widget-template').html(), {widgetInfo: widget});
this.$el.html(template);
this.$el.offset({top:widget.get('position').top, left:widget.get('position').left})
$('.widget-wrap').draggable({
handle: ".widget-header",
stop: function (event, ui) {
widget.set({position: ui.position});
console.log(widget.get('position'));
}
});
}
});
BV = new baseView();
BV.render({left:0, top:0});
b = new baseView();
b.render({left:500, top:0});
任何幫助,將不勝感激,也如果我做任何事真奇怪我很想了解如何做的更好的建議。
請注意'defaults'中的'position:{...}',默認值是淺拷貝的,所以你最終可以用兩個'baseWidget'共享完全相同的'position'對象。如果默認值中有任何可變值,則應該爲'defaults'使用一個函數。 –