Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
D3.js 更改客户端数据转换meteor.js中的值_D3.js_Meteor - Fatal编程技术网

D3.js 更改客户端数据转换meteor.js中的值

D3.js 更改客户端数据转换meteor.js中的值,d3.js,meteor,D3.js,Meteor,在我当前的meteor.js项目中,用户可以创建一个项目并向其中添加数据节点。我用D3来显示力图中的节点。单击图形中的特定节点时,侧面板中的相应文本必须高亮显示。为此,我需要跟踪选定的节点。但是,我不想在数据库中存储“selected”字段 我现在正在使用此数据转换添加选定字段- /lib/routes.js Router.route('/project/:code', { name: 'projectPage', data: function() {

在我当前的meteor.js项目中,用户可以创建一个项目并向其中添加数据节点。我用D3来显示力图中的节点。单击图形中的特定节点时,侧面板中的相应文本必须高亮显示。为此,我需要跟踪选定的节点。但是,我不想在数据库中存储“selected”字段

我现在正在使用此数据转换添加选定字段-

/lib/routes.js

Router.route('/project/:code', {
    name: 'projectPage',
    data: function() { 
            return {
                project: Projects.findOne({code : this.params.code}), 
                nodes: Nodes.find({project: this.params.code}, {transform: function (doc) {
                       doc.selected = false;
                       return doc;
                    }})
            }

        }
});
模板是/client/templates/projectPage.html

<template name="projectPage">
  <div class="project-page page">
    <h3>{{project.title}}</h3>
    <p>{{project.summary}}</p>
    <div class="work-area">
        <div class="map-space">
            {{> nodeDisplay nodes=nodes}}
        </div>
        <div class="type-space">
            {{> typeDisplay nodes=nodes}}
        </div>
    </div>
  </div>
</template>


<template name="nodeDisplay">
   <div id="svgdiv"></div>
</template>

<template name="typeDisplay">
    {{#each nodesData}}
        <p>{{text}}</p>
        <br/>
    {{/each}}
</template>
但是,这会更新数据库以包含“选定”字段。
有没有更好的方法来保持反应性

meteor的方法是使用会话变量和助手函数

所以不是

Nodes.update(selected_id.toString(), {$set: {selected: true}});
使用

以及Template.typeDisplay.helpers中的accompnying助手

isNodeSelected: function() {
  if(Session.get("selected_node") === this._id) {
    return "selected"
  }
}
在显示每个节点的模板中(此代码假定您希望通过应用类名“selected”在typeDisplay中选择相应的文本):


{{{#每个节点数据}

{{text}


{{/每个}}
Session.set("selected_node", this._id);
isNodeSelected: function() {
  if(Session.get("selected_node") === this._id) {
    return "selected"
  }
}
<template name="typeDisplay">
  {{#each nodesData}}
    <p class="{{isNodeSelected}}">{{text}}</p>
    <br/>
  {{/each}}
</template>