javascript - 为什么我的组件无法获取其父级数据,除非在 RactiveJS 中指定

标签 javascript ractivejs

我创建了一个在父级中调用的组件,但是在尝试通过键路径函数获取组件中的值时,它是空的。现在,除非我直接在组件模板中调用此键路径,否则它似乎不存在,即使它仍然存在于父级中。下面的例子来说明这一点。

http://jsbin.com/golen/1/edit?html,js

最佳答案

发生的事情是 this 是组件:

<p>Date: {{ startTime(this) }}</p>

指的是ticket组件中的默认上下文(组件获取自己的数据内容),而不是ticket组件中的上下文。

但是,组件将在父级上下文中寻找它在其上下文中找不到的属性(除非已在组件上设置了 isolated: true ,在这种情况下它将不会'不要离开它的上下文)。当它找到这些属性时,它会在自己的上下文中“借用”它们(保持所有内容同步),您可以通过将 {{JSON.stringify(.)}} 添加到票证组件来查看:

> Object {title: "1st Release", price: "10.00", startTime: function} 

因此,一个简单的解决方法就是直接在组件中使用 sale_start 属性:

<p>Date: {{ startTime(sale_start) }}</p>

或者,如果您愿意,您可以只访问函数中的数据:

startTime: function () {
  return this.get('sale_start');
}

传入属性或使用 get 语法的优点是您将获得属性的自动更新。如果 sale_start 的值发生变化,传入上下文 this 并调用 this.sale_start 不会自动更新。

如果您使用计算属性:

computed: {
    startTime: 'humaneDate(${sale_start})'
}

您可以在模板中将其作为属性而不是函数引用:

<p>Date: {{ startTime }}</p>

另一个选项是通过将整个票证数据对象显式声明为参数,将其带入组件上下文:

<ticket ticket="{{.}}"/>

如果您需要大量操作组件中的对象,而不是格式化和显示一些属性,那么这可能是有利的。请记住,此更改会在票证组件数据上下文上创建一个 ticket 属性,因此可以方便地为票证创建 block :

{{#ticket}}
<div class="ticket">
  <p>Title: {{ title }}</p>
  <p>Price: {{ price }}</p>
  <p>Date: {{ startTime(.) }}</p>
</div>
{{/}}

尽管仅使用它就可以正常工作(假设您在 startTime 函数中使用 sale_startticket.sale_start :

<div class="ticket">
  <p>Title: {{ title }}</p>
  <p>Price: {{ price }}</p>
  <p>Date: {{ startTime(sale_start) }}</p>
</div>

关于javascript - 为什么我的组件无法获取其父级数据,除非在 RactiveJS 中指定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23437039/

相关文章:

javascript - 遍历 Ractivejs mustache 中的父级

javascript - 数组修改在 Ractive JS 中不起作用

javascript - JS RegEx 删除 URL 的一部分?

javascript - 在工具提示中使用 ng-click

javascript - 我可以从导入的对象定义 ES6 静态方法吗?

javascript Submit() 后跟 self.close() 不起作用

javascript - 计算页面上具有 id 属性的列表元素的数量

javascript - 在 RactiveJS 中,我如何检测它是否分离?

javascript - 如何用Ractive响应img加载事件?

javascript - Ractive.js 中的 onrender 与 init