现在如何使用 Blaze 在 Meteor 模板中的动态字段上使用 X-editable?

2023-12-05

I had x-可编辑在 Meteor 0.7.2 中工作,但自从升级到 0.8.0 后,它不再正确渲染。我往往会得到一堆空标签。这很令人沮丧,因为数据就在那里,只是在渲染函数被触发时还没有。

<template name="clientPage">
    <header>{{> clientPageTitleUpdate}}</header>
</template>

<template name="clientPageTitleUpdate">
    <h1><span class="title-update editable" data-type="text" data-pk="{{_id}}" data-name="title" data-value="{{title}}">{{title}}</span></h1>
</template>


    Template.clientPageTitleUpdate.rendered = function() {

        console.log(this.$(".title-update").text());

        // set up inline as defaule for x-editable
        $.fn.editable.defaults.mode = 'inline';

        $(".title-update.editable:not(.editable-click)").editable('destroy').editable({

            url:    "empty",
            toggle: "dblclick",

            success: function (response, newValue) {
                // update value in db
                var currentClientId = $(this).data("pk");
                var clientProperties = { title: newValue };

                Clients.update(currentClientId, {$set: clientProperties}, function(error) {
                    if (error) {
                        Errors.throw(error.message)
                    }
                });
            }// success

        });

    }

我已经尝试了“新”渲染方法,将其嵌入到另一个模板中,如所解释的here而且它似乎也不起作用。

现在使用 x-editable 的最佳方法是什么,渲染仅触发一次并且不确保数据存在。

我正在使用 Iron Router,我的模板没有嵌入到 {{#each}} 块中,这似乎是新渲染模型的基本解决方案。

这个问题与这个旧主题有关流星模板中的 x-editable.

任何帮助都会在这里非常感激。我很茫然。谢谢


编辑:现在在 Meteor 0.8.3 中更容易实现:

模板:

<template name="docTitle">
    <span class="editable" title="Rename this document" data-autotext="never">{{this}}</span>
</template>

Code:

Template.docTitle.rendered = ->
  tmplInst = this

  this.autorun ->
    # Trigger this whenever data source changes
    Blaze.getCurrentData()

    # Destroy old editable if it exists
    tmplInst.$(".editable").editable("destroy").editable
      display: ->
      success: (response, newValue) -> # do stuff

为了最有效地实现这一点,请确保可编辑模板的数据上下文只是正在编辑的字段,如上面的示例所示{{> docTitle someHelper}}.


以下为 Meteor 0.8.0 至 0.8.2 的过时信息

我也必须这样做,但不确定是否在我的应用程序中使用全局助手。所以我尝试通过改变可编辑的行为来实现它。

之后需要做的主要事情仔细阅读文档和来源是:

  • 从字段文本设置表单的值
  • 覆盖display函数使得由 Meteor 更新的文本的反应性不会中断
  • 确保以上两个功能不会被破坏

这是代码(对 Coffeescript 表示歉意):

Template.foo.rendered = ->
  container = @$('div.editable')
  settings =
    # When opening the popover, get the value from text
    value: -> $.trim container.text()
    # Don't set innerText ourselves, let Meteor update to preserve reactivity
    display: ->
    success: (response, newValue) =>
      FooCollection.update @data._id,
        $set: { field: newValue }
      # Reconstruct the editable so it shows the correct form value next time
      container.editable('destroy').editable(settings)
  container.editable(settings)

这很丑陋,因为它会在设置新值后销毁并重新创建弹出窗口,以便表单字段从正确的值更新。

经过更多的逆向工程后,我找到了一种更干净的方法来执行此操作,并且不涉及破坏可编辑内容。加迪是对的container.data().editableContainer.formOptions.value与此有关。这是因为这个值是更新后设置因为 x-editable 认为它现在可以缓存它。嗯,它不能,所以我们用原始函数替换它,以便继续从文本字段更新值。

Template.tsAdminBatchEditDesc.rendered = ->
  container = @$('div.editable')
  grabValue = -> $.trim container.text() # Always get reactively updated value
  container.editable
    value: grabValue
    display: -> # Never set text; have Meteor update to preserve reactivity
    success: (response, newValue) =>
      Batches.update @data._id,
        $set: { desc: newValue }
      # Thinks it knows the value, but it actually doesn't - grab a fresh value each time
      Meteor.defer -> container.data('editableContainer').formOptions.value = grabValue

Notes:

  • $.trim以上摘自渲染值的默认行为
  • 有关此的更多讨论,请参阅https://github.com/nate-strauser/meteor-x-editable-bootstrap/issues/15
  • 这都是一个丑陋的黑客行为,希望将来我们能在 Meteor 中看到对双向变量绑定的更好支持。

将来我会尝试使其更加简洁,等待 Meteor 更好地支持响应式依赖数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

现在如何使用 Blaze 在 Meteor 模板中的动态字段上使用 X-editable? 的相关文章

随机推荐

  • Facebook javascript 在“分享”上触发

    我在这里看到了这个链接 如何检测Facebook分享成功 使用 JavaScript 但我该如何实现呢 首先 您需要在页面中加载 Javascript SDK div div
  • Java SwingWorker 不会在任务完成时终止

    好的 所以我一直在使用 SwingWorker 并获得了一些用于更新 gui 的简化代码 但我无法弄清楚如何让线程在完成时正确终止 目前 它只能通过 stop 选项终止 我该如何设置它才能在线程完成进程时正确终止线程 目前 经过return
  • SQLiteException:没有这样的列:basal(代码1)

    我正在使用数据库 并且有以下 DataBaseHandling 类 public class DatabaseHandler extends SQLiteOpenHelper All Static variables Database Ve
  • 使用 python 反向模板

    我有一个文件 充满了某种格式的数据 我想用该数据填充我自己的数据结构 例如 我可以有一个这样的文件 John Smith 0123 children Sam Kim 我想用该字符串做一些事情 以便将数据提取到例如 firstName Joh
  • Outlook 根据类别自动更改提醒

    我需要自动化 Outlook 以便当用户在约会上设置特定类别时 它会根据该类别自动设置提醒时间 例如 用户具有 现场会议 类别和 场外会议 类别 他希望现场会议的提醒时间自动更改为 15 分钟 场外会议的提醒时间自动更改为 30 分钟 他明
  • 如何使用 Object 参数对 Arraylist 中的对象进行排序

    我在对 Arraylist 中的对象进行排序时遇到问题 因为我是排序对象的新手 对数组列表进行排序非常基本 但对对象的数组列表进行排序是完全不同的事情 基本上 我一直在堆栈溢出中查看代码 人们似乎使用比较器来解决他们的问题 但他们没有解释如
  • XCode 无法构建 Unity3D 项目:找不到 lib

    我有 Unity3D 项目 我为 iOS 构建了它 如果我使用 XCode 的模拟器运行它 它工作得很好 但是 如果我想为 iOS 设备 或连接到我的 Mac 的物理设备编译它 我会遇到很多错误 因此我无法创建存档 出于测试目的 我什至创建
  • 如何使用php将GPS坐标转换为完整地址? [复制]

    这个问题在这里已经有答案了 我的 GPS 坐标格式为54 1456123 10 413456 如何使用 PHP 将它们转换为包含邮政编码 街道和城市的地址 使用谷歌API lat 54 1456123 long 10 413456 url
  • Python for 循环跳过所有其他值

    我在 django 应用程序中遇到了一个奇怪的问题 其中 for 循环跳过了所有其他项目 我已经获取了返回的查询集并且list ed 进行迭代 这样做的目的是删除另一个列表中的项目 该列表通过 POST 变量传递到视图 该视图是一个ajax
  • 如何在 Windows Phone 中使用 Bing 搜索 API?

    我正在尝试使用 Bing 搜索 API 查找图像作为应用程序内图块的背景 我已将 BingSearchContainer cs 包含在我的项目中 但无法使其与此处提供的示例代码一起使用 有关如何在我的 Windows Phone 8 应用程
  • 有时读取 ImportXML 单元格时,.getValue() 返回 #N/A

    我编写了一个脚本 将 ImportXML 公式写入单元格 然后几秒钟后尝试读取单元格并将其替换为它的返回值 问题是当我用获取的值替换单元格时 我经常 但并非总是 得到 N A 问题是 我能够在短时间内看到正确的值 因此 ImportXML
  • Docker 中 Bcrypt 安装失败

    我使用 MongoDB 创建了一个在 Docker 中运行的节点应用程序 它工作得很好 直到我包括在内节点 bcrypt js 这使得 Node 崩溃node gyp and bcrypt 该应用程序在本地和 Heroku 上运行良好 我尝
  • CardLayout,通过ButtonClick在JPanel之间切换

    我想通过单击 JPanel 上的按钮在 JPanel 之间切换 例如 我有一个带有 JButton simknop 的 JPanel sim 和一个带有 JButton helpknop 的 JPanel 帮助 我想通过单击按钮在这 2 个
  • PaintEvent 中警告 QPainter [重复]

    这个问题在这里已经有答案了 我尝试在 QChartView 中绘制更多信息 因此我重新实现了paintEvent virtual void paintEvent QPaintEvent event QChartView paintEvent
  • 当 Coq 中使用自己的可判定性时,评估计算不完整

    The Eval compute命令并不总是计算为简单表达式 考虑代码 Require Import Coq Lists List Require Import Coq Arith Peano dec Import ListNotation
  • 为什么用逗号进行双重初始化是非法的?

    我有三个代码片段 这个 1 7 yes that s all the code 编译没问题 这个 double d 1 7 也编译没问题 然而这个 double d 1 7 编译失败 gcc 4 3 4 说 错误 在数字常量之前预期有不合格
  • 调用 webapi 抛出 No Access-Control-Allow-Origin 标头出现在请求的资源上

    我正在尝试按照 Azure 示例通过此处提供的 WSFederation 将 Azure AD 集成到我的 MVC 4 6 Web 应用程序中https github com Azure Samples active directory d
  • Python 按值搜索

    我需要一个合适的解决方案来搜索 Python 嵌套数据结构中的键 假设我有一个带有值 check 的变量和这样的字典 SERVICES domain check whois register user create show delete
  • NoClassDefFoundError:com.opencsv.CSVWriter

    我尝试使用 opencsv libray 来获取加密格式数据 但在 CSV writer 上写入时 我收到 NoClassDefFoundError 我看过很多与相同错误相关的帖子 并尝试了几乎所有方法 但仍然无法纠正问题 下面的链接有同样
  • 现在如何使用 Blaze 在 Meteor 模板中的动态字段上使用 X-editable?

    I had x 可编辑在 Meteor 0 7 2 中工作 但自从升级到 0 8 0 后 它不再正确渲染 我往往会得到一堆空标签 这很令人沮丧 因为数据就在那里 只是在渲染函数被触发时还没有