Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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
Meteor-从jquery ui可拖动的“开始”事件更新模板数据_Jquery_Jquery Ui_Meteor - Fatal编程技术网

Meteor-从jquery ui可拖动的“开始”事件更新模板数据

Meteor-从jquery ui可拖动的“开始”事件更新模板数据,jquery,jquery-ui,meteor,Jquery,Jquery Ui,Meteor,我有一个可以移动的元素集合。我按他们最后一次搬家的时间对收藏品进行分类 Cards.find({},{sort:{moved:1}}); 当我开始拖动一个元素时,我想更新moved属性,但我不想在完成拖动之前更新数据库 这是我的尝试: Template.cardItem.rendered = function() { $('.card-item').draggable({ handle: '.card-handle', start: function(e

我有一个可以移动的元素集合。我按他们最后一次搬家的时间对收藏品进行分类

Cards.find({},{sort:{moved:1}});
当我开始拖动一个元素时,我想更新moved属性,但我不想在完成拖动之前更新数据库

这是我的尝试:

Template.cardItem.rendered = function() {
    $('.card-item').draggable({
        handle: '.card-handle',
        start: function(evt, ui) {
            var data = Blaze.getData(evt.target);
            data.moved = new Date().getTime(); // not working
        },
        stop: function(evt, ui) {
            var card = {
                _id: $(this).attr('id'),
                left: ui.position.left,
                top: ui.position.top
            };
            Meteor.call('cardMove', card, function(error, result) {
                if (error) {
                    console.log(error);
                }
            });
        }
    })
};
我想我的问题是我不知道如何从jQuery上下文访问模板实例。

我通常使用:template.currentData

也许您对无法从jQuery上下文获取数据的说法是对的,我也不确定

这是使用Session或custom ReactiveDict的完美方案,请参阅

您还可以执行以下操作:

this.autorun(function(computation){
    var data = Template.currentData(); //this is a reactive dependency
    if(computation.firstRun){
        //init your jquery code
    }
});
您可以访问jQuery代码中的数据。您需要创建自动运行并检查第一次运行的原因是为了避免每次数据更改时都运行jQuery代码。在使用Template.rendered创建小部件时,我遇到了严重的性能问题

在您的情况下,我认为使用Session/ReactiveDict是一个不错的选择。从长远来看,它提供了更多的灵活性

注: 我不喜欢Meteor方法,我认为这有违Meteor工作流程。使用allow/deny规则并通过minimongo直接插入会更简单。

在您的代码示例中,这是什么和计算,它应该放在哪里?这一点指向当前模板,例如:this。$意味着您仅在该模板上运行jQuery。这是一个很好的做法。计算是允许访问计算的参数。我正在使用firstRun属性检查这是否是我第一次运行自动运行。