【问题标题】:How can one make Transcrypt compile to object rather than dict?如何让 Transcrypt 编译为对象而不是 dict?
【发布时间】:2018-05-19 15:52:17
【问题描述】:

我正在尝试使用 Transcrypt 的 fetch API。

来源:

headers = {
    "Access-Control-Request-Method": "GET",
    "Access-Control-Request-Headers": "origin, x-requested-with",
    "Origin": "https://bar.com/"
}

args = {
    "method":"OPTIONS",
    "headers":headers
}

fetch("https://foo.com/",args).then(
    lambda response: print(response),
    lambda err: print(err)
)

编译为:

var headers = dict ({'Access-Control-Request-Method': 'GET', 'Access-Control-Request-Headers': 'origin, x-requested-with', 'Origin': 'https://bar.com/'});
        var args = dict ({'method': 'OPTIONS', 'headers': headers});
        fetch ('https://foo.com/', args).then ((function __lambda__ (response) {
            return print (response);
        }), (function __lambda__ (err) {
            return print (err);
        }));

打印:

TypeError: Failed to execute 'fetch' on 'Window': Iterator is not an object.

如果我从编译的代码中删除dicts,它就会运行。

如何编译为正确的 Javascript 对象而不是 dict?

【问题讨论】:

  • 您的方法只能包含GETPOST,不允许OPTIONS
  • 我不确定dict 是如何创建和返回的,但args 需要是一个javascript 对象。 {method:'GET', headers: {}}
  • 这是我的问题,为什么 Transcrypt 编译为 dict 而不是正确的对象?
  • 在获取之前,请执行console.log(args) 以查看其格式是否正确
  • 编译后的代码是错误的,如果我删除dict它运行

标签: javascript python dictionary object transcrypt


【解决方案1】:

现在明白了。

事实证明:

https://www.transcrypt.org/docs/html/special_facilities.html#create-bare-javascript-objects-and-iterate-over-their-attributes-from-python-pragma-jsiter-and-pragma-nojsiter

通常 Python {...} 文字会编译为 dict ({...}) 以包含 Python dict 的特殊属性和方法,包括例如一个 迭代器。当 pragma ('jsiter') 处于活动状态时,Python {...} 文字 被编译成一个裸 {...},没有特殊的属性或方法。至 仍然能够遍历这样一个裸 JavaScript 的属性 来自 Python 的对象,当 pragma ('jsiter') 处于活动状态时,一个 Python 用于 ... in ... 直译为 JavaScript for (var ... in ...)。这个 pragma 的主要用例是方便地循环 通过元类的 new 方法中的类属性。作为一个 更灵活但不太方便的替代方法,pragma ('js', '{}', '''...''') 可以使用。

所以代码应该是:

__pragma__('jsiter')

headers = {
    "Access-Control-Request-Method": "GET",
    "Access-Control-Request-Headers": "origin, x-requested-with",
    "Origin": "https://bar.com/"
}

args = {
    "method":"OPTIONS",
    "headers":headers
}

__pragma__('nojsiter')

【讨论】:

    猜你喜欢
    • 2017-08-11
    • 1970-01-01
    • 2018-04-26
    • 2012-06-29
    • 2021-05-18
    • 2019-07-10
    • 1970-01-01
    • 2017-07-10
    • 2010-12-13
    相关资源
    最近更新 更多