如何在Web组件中设置标签的内部文本

时间:2014-11-25 13:50:34

标签: javascript html5 web-component custom-element x-tag

我正在使用x-tags。这是我正在处理的代码。我需要使用自定义元素属性值的值设置这些div框的内容。是否有可能做到这一点?我试过设置但是我得到错误" undefined不是函数"。

var template = xtag.createFragment(function(){/*
  <div>
    <div id="box1"></div>
    <div id="box2"></div>
    <div id="box3"></div>
  </div>
*/});

xtag.register('x-navbar', {
  lifecycle: {
    created: function() {
      this.appendChild(template.cloneNode(true));
      this.getElementById("#box1").innerHTML = this.productName;
    },
  accessors: {
    productName: {
      attribute: {},
      get: function(){
        return this.getAttribute('productName') || "";
      },
      set: function(value){
        this.xtag.data.header.setAttribute('productName',value);
      }
    }
  }
});

<x-navbar productName="Box 1">hii</x-navbar>

2 个答案:

答案 0 :(得分:1)

您可以像这样编写支持访问者的属性。您不需要手动尝试设置属性。因为它会从get函数返回值更新。

accessors: {
            productName: {
                attribute: {},
                get: function () { return this._productName; },
                set: function (value) { 
                     this._productName = value;
                     // MANUPLATE YOUR HTML IN HERE
                     this.getElementById("#box1").innerHTML = this.productName;
                }
            },
}

答案 1 :(得分:0)

您可以进一步简化此操作,因为您没有更改setter中的productName:

xtag.register('x-navbar', {
  content: function() {/*
  <div>
    <div id="box1"></div>
    <div id="box2"></div>
    <div id="box3"></div>
  </div>
*/},
  accessors: {
    productName: {
      attribute: {},
      set: function (name) {
        this.querySelector('#box1').textContent = name;
      }
    }
  }
});

您可以这样使用:

<x-navbar product-name="Testing 123">hii</x-navbar>

请注意,属性名称必须是productNameproduct-name的虚线版本。这将呈现为:

hii
Testing 123

在元素的内容<div>之后添加模板hii结构。