Ember事件处理程序中缺少视图.context或templateContext

llew8vvj  于 2022-11-29  发布在  其他
关注(0)|答案(1)|浏览(173)

我试图将填充视图的对象推入数组,但引用不知何故丢失了。我得到了一个Ember视图,其中定义了eventManager

FrontLine.NewProductButton = Em.View.extend({
    tagName: 'button',
    classNames: ['addtl_product',],
    templateName: 'product-button',
    eventManager: Ember.Object.create({
        click: function(event, view) {
            FrontLine.ProductsController.toggleProductToCustomer(event, view);
        }
    })
})

该视图呈现了一组按钮,这些按钮的属性来自ProductsController中的对象,使用#each辅助器呈现。这部分工作得很好。当我点击其中任何一个按钮时,click事件都会触发,并执行我要求的任何操作,包括成功调用我从ProductsController中指定的处理函数(toggleProductToCustomer):

FrontLine.ProductsController = Em.ArrayController.create({
    content: [],
    newProduct: function(productLiteral) {
        this.pushObject(productLiteral);
    },
    toggleProductToCustomer: function(event, view){
        FrontLine.CustomersController.currentCustomer.productSetAdditional.pushObject(view.context);    
    }
});

我尝试使用该函数将其属性填充到视图中的对象推入数组。(一个简单的搜索字段),使用pushObject(view.context)可以很好地工作。但是,在这里,所有被推入数组的都是undefined。我尝试使用view.templateContext来代替,但效果并不好。当我尝试从这些函数内部console.log-ing按钮的view对象时,得到了我所期望的结果:

<(subclass of FrontLine.NewProductButton):ember623>

但是view.contextview.templateContext返回undefined,我如何访问我想要的对象,以便将其添加到我的数组中?

jk9hmnmh

jk9hmnmh1#

答案很简单,就是一个字母的差别:

view.content

或:

view.get('content')

提供该特定情况下的源对象,而不是view.context
(My到目前为止,Ember唯一真实的的挑战是对象和属性的访问器因情况而异,而且没有真正的文档。有时对象在view.context中,有时在view.content中,有时在_parentView.content中,等等。如果有一个图表使用无数不同的语法来访问相同的数据,那就太棒了。这取决于你要通过哪个特定的光圈来得到它。我还在发现它们...)

相关问题