用对象替换纸张下拉菜单中选定纸张项目的空值

Replace null value of selected paper-item in paper-dropdown-menu with object

我无法使 site.address.country 的这种简单绑定正常工作:

我的后端 returns 像这样的 json 对象,以防未设置国家/地区:

{ "address" : { "street" : null, "country" : null } }

有了这个结构,当paper-dropdown-menu改变时,Polymer似乎不能用

替换null-country的值
{ "address" : { "street" : null, "country" : { "id" : "lu" } } }

让 Polymer 将 country 的空值替换为 { "id" : "lu" } 的正确方法是什么?

到目前为止,这是我的代码:

<paper-dropdown-menu label="Country">
    <paper-menu attr-for-selected="value" selected="{{site.address.country.id}}" class="dropdown-content">
        <paper-item value="lu">Luxembourg</paper-item>
    </paper-menu>
</paper-dropdown-menu>
<paper-input value="{{site.address.street}}" label="Street"></paper-input>

我可以但不想做一些骇人听闻的事情,比如在我从后端获取值后替换它,à la:

siteLoaded: function(e) {
    if (!e.detail.response.address.country) {
        e.detail.response.address.country = { "id" : "" };
    }
    this.set("site", e.detail.response);
}

尝试使用以下方法为 属性 类型的对象定义默认值(通过定义 returns 默认对象的函数):

...

Polymer({
    is : "site-form",
    properties : {
        site : {
            type : Object,
            value :  function() { return { "address" : { "country" : {id: 0} } }; }
        }
    },
...

编辑: 在您重新格式化问题后,我明白了这个问题。在你的情况下,country.id 是未定义的,所以我想你的 hacky 方式应该是正确绑定的最佳解决方案。