1

サーバーからある種のツリーデータを取得します(例として):

[
    {
    nodeName: "top level 1",
    nodes: [
        {
        nodeName: "2nd level, item 1",
        nodes: [
            {
            nodeName: "3rd level, item 1"}
        ]}
    ]},
{
    nodeName: "top level 2",
    nodes: [
        {
        nodeName: "2nd level, item 3",
        nodes: [
            {
            nodeName: "3rd level, item 7"},
        {
            nodeName: "3rd level, item 8"},
        {
            nodeName: "3rd level, item 9"}
        ]}
    ]}
]​

これをレンダリングするために、Backbone.Marionette.CollectionView と Backbone.Marionette.CompositeView http://jsfiddle.net/AdWjU/179/を使用しています( derickbailey の記事に従います)。

しかし、300 秒ごとにサーバーをポーリングする必要があり、変更されたツリーを返すことができます。

[
    {
    nodeName: "top level 1",
    nodes: [
        {
        nodeName: "2nd level, item 1",
        nodes: [
            {
            nodeName: "3rd level, item 1"},
            {
            nodeName: "new name"} // changed
        ]}
    ]},
{
    nodeName: "top level 2",
    nodes: [
        {
        nodeName: "2nd level, item 3",
        nodes: [
            {
            nodeName: "3rd level, item 7"},
        {
            nodeName: "3rd level, item 8"},
        {
            nodeName: "3rd level, item 9"},
        {
            nodeName: "3rd level, item 10"} // added
        ]}
    ]}
]​

次に、tree.update(data) を呼び出すだけで、データ全体を再レンダリングします。

変更されたプロパティに依存するビューのみを更新するにはどうすればよいですか?

再レンダリングされるビューを減らそうとしています。このタスクを達成するには、CompositeViews を使用するか、Backbone-relational モデルのようなものを試す必要がありますか?

4

1 に答える 1

1

初期化のたびにコレクションを再構築しているため、update.

ノード ツリーを保持するには、サーバーから取得したツリーをバックボーンで同期する必要があります。これを行う最も簡単な方法は、nodeName と一緒に渡される一意の ID を作成し、それを基にしてモデルとコレクションを作成することです。次に、これを書き直すことができます:

if (nodes) {
  this.nodes = new TreeNodeCollection(nodes);
  this.unset("nodes");
}

ノードを爆破して再作成するのではなく、ルックアップを実行してノードが存在するかどうかを確認し、関連するコレクションに追加します。

于 2013-01-04T18:00:11.947 に答える