x-editable在Meteor中选择不会更新客户端上的值

时间:2014-11-28 18:03:22

标签: javascript meteor x-editable

我想在Meteor应用程序中使用select x-editable。我的目标是将用户分配到组。这应该是被动的,因此当您分配用户时,其他客户端应该看到更改。当前的问题是分配工作(data-value更改),但只有进行更改的用户才能看到新值。

这是我的代码:

Template.userGroup.rendered = function() {
    var groupId = this.data._id;
    var sourceUsers = [];
    Users.find().forEach(function(user) {
       sourceUsers.push({value: user._id, text: user.username});
    });
    Tracker.autorun(function() {
        $('.assign-user').editable("destroy").editable({
            emptytext: "Empty",
            source: sourceUsers,
            success: function(response, result) {
                if (result) {
                    Groups.update({_id: groupId}, {$set: {adminId: result}});
                }
            }
        });
    });
};


<template name="userGroup">
   <a href="#" data-type="select" class="assign-user" data-value="{{adminId}}"></a>
</template>

我已经尝试过&#34;销毁&#34;陈旧的x-editable并将其放在Tracker.autorun函数中,但不幸的是,这不起作用。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

我没有使用Tracker.autorun,但我使用x-editable进行内联编辑,如下所示:

enter image description here

(也用于群体分配 - 就像你的情况一样,但在UI方面发现它太笨拙了)。无论如何,这是我的代码:

<强>模板

<template name="profileName">
    <td valign='top'>
        <div id="profileNameID" class="editable" data-type="text" data-rows="1">{{profile.name}}</div>
    </td> 
</template>

在JS方面

Template.profileName.rendered = function () {
    var Users = Meteor.users;
    var container, grabValue, editableColumns, mongoID,
        _this = this;
    var container = this.$('#profileNameID');
    var editableColumns = container.size();

    grabValue = function () {
        var gValue = $.trim(container.html());  
        return gValue;
    };

    $.fn.editable.defaults.mode = 'inline';
    return container.editable({
        emptytext: 'Your name goes here',
        success: function (response, newValue) {
            var mongoID = removeInvisibleChars($(this).closest("tr").find(".mongoid").text());
            var editedUser = _users.findOne({
                _id: mongoID
            });

            Meteor.users.update(mongoID, {
                $set: {
                    "profile.name": newValue
                }
            });
            return container.data('editableContainer').formOptions.value = grabValue;
        }
    });

所有订阅的授权客户端都会立即进行更新。