我想在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
函数中,但不幸的是,这不起作用。
非常感谢任何帮助。
答案 0 :(得分:1)
我没有使用Tracker.autorun
,但我使用x-editable进行内联编辑,如下所示:
(也用于群体分配 - 就像你的情况一样,但在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;
}
});
所有订阅的授权客户端都会立即进行更新。