【问题标题】:how use entity key (or another object) for javascript call from html如何使用实体键(或其他对象)从 html 调用 javascript
【发布时间】:2013-05-31 10:37:17
【问题描述】:

如何创建一个按钮,在他的onClick 事件中调用带有对象的函数?我的特殊情况下的实体键?

我在我的数据库中填充了一个包含所有对象的表并想要添加一个删除按钮...删除功能需要密钥,但我无法让它工作

以下内容不起作用:

htmlString += "<td class='devicenameCol'><input id=\"deleteQuestion\" type=\"button\" value=\"löschen\" onclick=\"deleteQuestion(" + item.key + ");\"/></td>";

【问题讨论】:

  • 看起来您在示例中直接将密钥对象本身作为参数传递。将密钥用作网页上的参数时,应将其设为 urlsafe:key_safe = item.key.urlsafe()。读回密钥时,您可以这样做:key = ndb.Key(urlsafe=key_safe).
  • 实际上,我现在将我的“id”从 Key 更改为 Long...但这看起来与我要找的完全一样...今晚我会看看...谢谢
  • 你能告诉我如何让 urlsafe 方法工作吗? chrome调试器,我得到一个例外,没有urlsafe功能......我可以在javascript中以某种方式做到这一点吗?还是我必须在 java 中完成所有这些并将 urlsafe 数据添加到我的对象中?
  • 由于您没有指定它是Java,所以我的答案是基于Python SDK。但是,要回答您的问题:是的,需要在服务器上为密钥实例运行 urlsafe 方法。似乎key.urlsafe() 的Java 等效项是KeyFactory.keyToString()KeyFactory.stringToKey(),它们是“网络安全的”。这里是the documentation
  • 非常感谢,这对我有帮助

标签: javascript html google-app-engine entity


【解决方案1】:

我在表格中使用此 HTML / Jinja 代码在表格行中创建按钮:

<td class="center"><input class="button" type="submit" name="eid={{ rows.eid }}" value="{{ rows.caption }}"></td>

在哪里:

  • rows.eid 包含实体 ID
  • rows.caption 包含按钮文本

并且我使用“eid=”作为令牌在请求数据中查找按钮(令牌)。

【讨论】:

    【解决方案2】:

    有几种方法可以解决这个问题。如果您使用onclickattribute,您可以使用如下参数调用该方法:

    <button onclick="myFunction(value)" />
    

    根据您填充列表的方式,这可能很简单。例如,如果您使用的是 ASP.NET MVC,您可以执行以下操作

    @foreach(var entity in myEntitireDatabase)
    {
        <button onclick="myFunction(@entity.Key)" />
    }
    

    但是,如果您使用 JavaScript 填充表格,您可能希望将键绑定到属性,并从元素中读取它。例如,您可以像这样添加一个 data-key 属性:

    <button data-key="value" />
    

    并且在 JavaScript 中为每个按钮附加一个处理程序

    button.addEventListener("click", myHandler)
    

    在 myHandler 函数中,this 指针被设置为元素,因此您可以简单地读取 data-key 属性:

    function myHandler(){
        var key = this.getAttribute("data-key");
        //Code to perform delete
    }
    

    【讨论】:

    • 我试过这样的事情,问题是,我需要像序列化这样的东西......因为在html部分,每个对象都会被转换为“对象对象”,这就是我的问题......
    • 我明白了,我误会了。这可能是因为您的 item.key 不是原始值,而是一个对象。每当您执行 object.toString() 时,您都会得到“[Object object]”结果。您应该调试脚本并查看 item.key 实际持有的值!
    猜你喜欢
    • 2015-11-25
    • 1970-01-01
    • 2018-05-31
    • 1970-01-01
    • 2012-01-14
    • 2017-03-12
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    相关资源
    最近更新 更多