2013-04-12 79 views
0

我正在爲流星應用程序使用數據表。 我的問題是,當一些領域改變所有的表格再次呈現,如果我在表格上的第二頁或我按字段排序,表格再次呈現,我回到了開始。 我的代碼:如何在不渲染所有表的情況下更新數據表?

Template.adminpage.rendered = function() { 
    $('#userData').dataTable({ 
     "bDestroy":true, 
     "aaSorting": [[ 0, "desc" ]], 
     "bAutoWidth":false, 
     "bFilter": false, 
     "aoColumns": [ 
      { "bVisible": false }, 
      null, 
      null, 
      null, 
      null, 
      null, 
      null, 
      null 
     ], 
     "aaData": Template.adminpage.arrayUsersAdmin() 
    }); 
} 

Array用於填充表:

Template.adminpage.arrayUsersAdmin=function() { 
    var adminUsers = allUserData.find({roles: 'basic'}); 
    var arrayUserAdmin = []; 
    var count=0; 
    adminUsers.forEach(function(user) { 
     var idColumn = user._id; 
     var dateColumn=moment(user.createdAt).format("MMM Do HH:mm"); 
     var usernameColumn=username; 
     var emailColumn=email; 
     arrayUserAdmin[count]=[ 
      idColumn, 
      dateColumn, 
      usernameColumn, 
      emailColumn 
     ]; 
     count++; 
    }); 
    return arrayUserAdmin; 
} 

收集服務器上:

if(Meteor.users.find({_id: this.userId}, {roles: 'admin'})){ 
    Meteor.publish("allUserData", function() { 
     var self = this; 
     var handle = Meteor.users.find({}).observeChanges({ 
      added: function(id, fields){ 
       self.added("allUsersCollection", id, fields); 
      }, 
      changed: function(id, fields){ 
       self.changed("allUsersCollection", id, fields); 
      }, 
      removed: function(id){ 
       self.removed("allUsersCollection", id); 
      } 
     }); 
     self.ready(); 
     this.onStop(function() { 
      handle.stop(); 
     }); 
    }); 
} 

感謝您的時間。

回答

1

您可以通過reactive: false作爲一個選項find,禁用底層增加了依賴,就像這樣:

Template.adminpage.arrayUsersAdmin=function() { 
    var adminUsers = allUserData.find({roles: 'basic'}, reactive: false); 
    // Your code 
    return arrayUserAdmin; 
} 

這種行爲被記錄在案here

另外,如果你想在個人字段更新,你將不得不自己添加它們。爲此,您可以使用allUserDate.find({roles: 'basic'}).observe。然而,這需要你直接編輯HTML,而且很麻煩。一個更好的選擇是完全改變你的表結構 - 不要使用數據表,使用vanilla HTML表,並用最小的查詢排序數據。

無論如何,你可以用觀察,像這樣:

allUserData.find({roles: 'basic'}).observe({ 
    changed: function(newDocument, oldDocument) { 
     // Update table 
    } 
}); 
+0

是的,但我想那場更新,我不想要那個表時發生這種情況被渲染,只是改變的字段。 – lfergon

+0

@lfergon請參閱編輯 – Swadq

+0

謝謝你的幫助:) – lfergon

相關問題