Backbone.js d3.js主干视图中的强制布局命名空间
我正在开发一个中等复杂的应用程序,使用backbone.js来处理wordpress数据,但我不知道如何让原力在主干布局中工作 基本上,我尝试在主干模板布局中实例化force布局,如下所示:Backbone.js d3.js主干视图中的强制布局命名空间,backbone.js,d3.js,backbone-views,backbone-boilerplate,force-layout,Backbone.js,D3.js,Backbone Views,Backbone Boilerplate,Force Layout,我正在开发一个中等复杂的应用程序,使用backbone.js来处理wordpress数据,但我不知道如何让原力在主干布局中工作 基本上,我尝试在主干模板布局中实例化force布局,如下所示: myLayout = Backbone.Layout.extend({ initialize: function() { var f = this; // i.e. the layout instance f.force = d3.layout.force()
myLayout = Backbone.Layout.extend({
initialize: function() {
var f = this; // i.e. the layout instance
f.force = d3.layout.force()
.nodes(myModels)
.on("tick", f.tick)
.gravity(0)
.friction(0.9)
.start();
console.log(f.force);
},
tick: function() {
// stuff to do when the force ticks
}
});
问题是,力是用所有空白函数定义的,比如重力:函数(x){//这里有很多空的东西}
。我很确定这是一个名称空间问题,但我尝试的方法都不起作用-我尝试过做$(窗口).force
,var-force
,$this.force
在我的示例中,tick
是唯一一个带名称空间的函数,但我也尝试过对所有其他函数(重力、摩擦力等)执行该操作,但没有任何效果(即使它们应该只是链接到力对象上)
有人有什么想法吗?我真的不能发布一个.jsfiddle,因为这个应用程序太复杂了,所以在此之前我很抱歉。当前版本已更新
编辑:以下是d3如何成功访问模型:
这项工作:
myLayout.nodes = myLayout.d3_wrapper.selectAll(".node")
.data(myModels)
.enter().append("g").attr("class", "node")
.attr("x",10)
.attr("y",10);
myLayout.nodes.append("clipPath")
.attr("id", function(d) { return d.get("slug"); })
正如这一点:
myLayout.nodes.append(“clipPath”)
.attr(“id”,函数(d){return d.attributes.slug})代码>
编辑:为了清晰起见,以下是非昵称代码:
setforce: function() { // this gets called from the layout's initialize fn
console.log("setting force");
var f = this; // the layout
f.force = d3.layout.force()
.nodes(Cartofolio.elders.models) // Cartofolio is the module, elders is a Backbone Collection
.gravity(0)
.friction(0.9)
.start();
console.log(f.force);
}
在将您的收藏传递给d3
之前,我会尝试使用toJSON()
:
myLayout = Backbone.Layout.extend({
initialize: function() {
var f = this; // i.e. the layout instance
f.force = d3.layout.force()
.nodes(myModels.toJSON())
.on("tick", f.tick)
.gravity(0)
.friction(0.9)
.start();
console.log(f.force);
},
tick: function() {
// stuff to do when the force ticks
}
});
myModels
变量包含什么?它是一组来自Backbone.Collection
的Backbone.Models
,其中每个都有一组。属性
-它们通过其他d3方法得到很好的利用,只是.force.layout
似乎是Finnicky。你能举一个例子说明另一个d3
方法如何访问模型上的属性吗?完成-用底部的问题编辑问题。d3_包装纸只是一个用来装整个东西的包装纸,没有骰子。我也可能不清楚——myModels是集合中模型直接数组的昵称——所以我给d3的是那个数组,而不是集合。所以-我的收藏是模块。收藏
及其模型是模块。收藏.模型
,这就是我要传递给force的内容。它不允许我调用Module.thecollection.models.toJSON()
,只调用Module.thecollection.toJSON
,这并没有真正的帮助,因为它仍然有太多的抽象步骤……我添加了真正的代码,希望它不会那么混乱。我确实需要能够监听更改,因此调用.toJSON不是非常理想(尽管我想每次都可以重新使用JSON)嗯。使用get
和set
函数是我知道的触发change
事件的最佳方法。可能值得深入研究force布局的调用,并在适当的位置添加get
和set
调用。可能是真的。那会很痛苦的。。。让我觉得这是一个名称空间问题的原因是,即使我将其设置为超文本,比如projects:[{//json literal list of projects}],setforce:fn(){//force setup function}
它也不会改变任何东西。