Я работаю над средним сложным приложением, использующим backbone.js для обработки данных Wordpress, и я не могу понять, как заставить силу работать в макете.d3.js пространство пространства макета пространства в представлении позвоночника
в основном, я пытаюсь создать экземпляр макета силы в макете магистральная шаблонный, как это:
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
}
});
Проблема заключается в том, что сила определяется со всеми пустыми функциями, как gravity: function(x) { //lots of null things here }
. я уверен, что это проблема Пространства имен, но я ничего не попробовать работы - я попытался сделать $(window).force
, var force
, $this.force
...
в моем примере tick
единственная функция в пространстве имен, но я пытался сделать это со всеми остальными (гравитация, трение и т. д.) безрезультатно (хотя они должны просто быть привязаны к силовому объекту).
У кого-нибудь есть идеи? Я не могу опубликовать .jsfiddle, потому что приложение слишком сложное, поэтому извините заранее об этом. Текущая версия до here
редактировать: вот как 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", function(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);
}
Что содержит 'переменная myModels'? – Ben
это набор 'Backbone.Models' из' Backbone.Collection', каждый из которых имеет кучу '.attributes' - они отлично натягиваются другими методами d3, это просто' .force.layout', который кажется быть finnicky – defenestrated
Вы опубликовали бы пример того, как другой метод 'd3' получает доступ к атрибутам на моделях? – Ben