Skip to content

ListView: Inconsistency retrieving bindingContext in tap handler #940

Closed

Description

@tjvantoll

This is a small issue that has tripped me up before, and which was also reported to me on Twitter. The syntax to get the bindingContext in a list view item's tap handler varies based on the type of element you use. Here's a short example:

<Page loaded="loaded">
    <ListView items="{{ myList }}">
        <ListView.itemTemplate>
            <StackLayout>
                <Button tap="buttonTap" text="Hi, I'm a button" />
                <Label tap="labelTap" text="Hi, I'm a label" />
            </StackLayout>
        </ListView.itemTemplate>
    </ListView>
</Page>
var observableModule = require("data/observable");
var observableArrayModule = require("data/observable-array");

var pageData = new observableModule.Observable({
    myList: new observableArrayModule.ObservableArray(["foo", "bar"])
});

exports.loaded = function(args) {
    var page = args.object;
    page.bindingContext = pageData;
};

exports.buttonTap = function(args) {
    console.log(args.object.bindingContext);
};
exports.labelTap = function(args) {
    console.log(args.view.bindingContext)
};

The thing to notice here is that buttonTap uses args.object.bindingContext, whereas labelTap uses args.view.bindingContext to get a reference to the same data.

It seems like the API should be the same regardless of what type of UI component you use. A consistent approach would also make it far easier to share code.

Activity

  1. enchev commented on Oct 15, 2015

    @enchev
    Contributor

    Hey TJ,

    This comes from the fact that the Button tap is event while the Label tap is gesture. We realized that both APIs can be merged and this is already done in our 1.4 release.

    Can you try args.object.bindingContext for the Label if you use 1.4?

    Thanks

  2. tjvantoll commented on Oct 15, 2015

    @tjvantoll
    ContributorAuthor

    Thanks @enchev.

    Interestingly with 1.4 using args.object.bindingContext for the Label works on Android, but does not work on iOS.

  3. self-assigned this
    on Oct 16, 2015
  4. added this to the milestone on Oct 16, 2015
  5. lock commented on Aug 30, 2019

    @lock

    This thread has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.

  6. locked and limited conversation to collaborators on Aug 30, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions