Jquery 发生数据库更改时手动渲染meteor模板

Jquery 发生数据库更改时手动渲染meteor模板,jquery,meteor,datatables,jquery-datatables,meteorite,Jquery,Meteor,Datatables,Jquery Datatables,Meteorite,我有一个meteorjs模板,我正在使用它来呈现一些记录。我想做的是,当数据库中发生任何更改时,我想手动调用template render方法。我可以从DOM中只重新加载一个模板来反映更改吗?我的代码是 <template name="textlines"> <table class="table table-striped table-bordered table-condensed table-hover listing" id="conten

我有一个meteorjs模板,我正在使用它来呈现一些记录。我想做的是,当数据库中发生任何更改时,我想手动调用template render方法。我可以从DOM中只重新加载一个模板来反映更改吗?我的代码是

<template name="textlines">
<table class="table table-striped table-bordered table-condensed table-hover listing"
               id="content_listing-table">
            <thead>
            <tr>
                <th>Text Lines</th>
            </tr>
            </thead>
            <tbody>
            {{#each textline}}
            <tr>
                <td>
                    <a href="#" data-id={{_id}} class="edit"> {{texts}}</a>
                </td>
            </tr>
            {{/each}}     
           </tbody>
        </table>
</template>

现在我想在对数据库进行CRUD操作后手动调用这个
模板.textlines.rendered
方法。我不知道我在问什么是对的还是错的,有没有可能。我在数据表方面遇到了一些问题。因此,我希望每次手动刷新模板,将数据库返回的内容添加到dataTable中。谢谢

嗯。我怀疑即将发布的Meteor UI版本将使jQuery UI插件在Meteor中正常工作,因此不会吸引人们应用Meteor反模式,但这里有一个可能实现您想要的东西:

Deps.autorun(function () {
  var htmlString = Template.textlines({textlines: Textlines.find()});
  $("#content_listing-table").replaceWith(htmlString);
  $("#content_listing-table").dataTable();
});

有了这一点,您将希望用

替换
{textlines}}
。嗯。我怀疑即将发布的Meteor UI版本将使jQuery UI插件在Meteor中正常工作,从而不会吸引人们应用Meteor反模式,但下面是一个可以实现您想要的东西的尝试:

Deps.autorun(function () {
  var htmlString = Template.textlines({textlines: Textlines.find()});
  $("#content_listing-table").replaceWith(htmlString);
  $("#content_listing-table").dataTable();
});

有了这个,您将希望用

替换
{{>textlines}}
,看起来您正在使用jQuery DataTables插件,并且您在保持插件维护的DOM随数据库更新时遇到了问题

如果是这样,您可以观察您的集合并使用它们的API进行更改

例如:

Template.textlines.created = function() {
    var _watch = Collection.find({});
    var handle = _watch.observe({
        addedAt: function (doc, atIndex, beforeId) {
            $('#content_listing-table').dataTable().fnAddData(doc);
        },
        changedAt: function(newDoc, oldDoc, atIndex) {
            $('#content_listing-table').dataTable().fnUpdate(newDoc, atIndex);
        },
        removedAt: function(oldDoc, atIndex) {
            $('#content_listing-table').dataTable().fnDeleteRow(atIndex);
        }
    });
};

此StackOverflow中有更多信息。

看起来您正在使用jQuery DataTables插件,并且您在使用数据库更新插件维护的DOM时遇到了问题

如果是这样,您可以观察您的集合并使用它们的API进行更改

例如:

Template.textlines.created = function() {
    var _watch = Collection.find({});
    var handle = _watch.observe({
        addedAt: function (doc, atIndex, beforeId) {
            $('#content_listing-table').dataTable().fnAddData(doc);
        },
        changedAt: function(newDoc, oldDoc, atIndex) {
            $('#content_listing-table').dataTable().fnUpdate(newDoc, atIndex);
        },
        removedAt: function(oldDoc, atIndex) {
            $('#content_listing-table').dataTable().fnDeleteRow(atIndex);
        }
    });
};

此StackOverflow中有更多信息。

如何定义
textlines
文本行?textlines是模板名称。文本行来自数据库哦,我的意思是
textline
如何定义
textlines
呢?textlines是模板名。还有短信都来自数据库哦,我是说
textline
谢谢你,戴普的唐尼·温斯顿。自动运行它无法访问数据库,意味着`Template.textlines({textlines:textlines.find()});`正在显示未发现。谢谢Donny Winston,在Deps。自动运行它无法访问数据库,意味着`Template.textlines({textlines:textlines.find()});`正在显示未查找。Thanx Jrullman。这两个问题我都问过了。它稍微解决了问题。很高兴听到它!如果您认为此答案对其他可能遇到您的问题的人有帮助,请单击复选标记接受此答案:)Thanx Jrullman。这两个问题我都问过了。它稍微解决了问题。很高兴听到它!如果您认为此答案对可能遇到您的问题的其他人有帮助,请单击复选标记接受此答案:)