My .where() function does not work

Hi,

I make an App for the elucidation about drugs. But I have a Problem with a .where() function. These datas are only dummy datas. I made that with a class for testing, normally theres a json file on a server

var drugList      = Observable();
var singleDrug    = Observable();
var drugListError = Observable("");

function drug(name, staerke, gefahrs, gefahra, legal, wirkstoffe, wirkung, risiken, wechselwirkung, kreuztoleranz, anmerkung, imageurl) {
    this.name           = name;
    this.staerke        = staerke;
    this.gefahr_selbst  = gefahrs;
    this.gefahr_andere  = gefahra;
    this.legalitaet     = legal;
    this.wirkstoffe     = wirkstoffe;
    this.wirkung        = wirkung;
    this.risiken        = risiken;
    this.wechselwirkung = wechselwirkung;
    this.kreuztoleranz  = kreuztoleranz;
    this.anmerkung      = anmerkung;
    this.imageurl       = imageurl;
}

var drugList = Observable(new drug("Alkohol", 4, 8, 5, "legal", "alkohol", "Die Wirkung von Alkohol ist schon ganz nice. Wobei die Selbstkontrolle, mir persönlich etwas unsicherheit gibt und ich daher lieber zu anderen Drogen greife wie zum Beispiel Cannabis.", "Leberschäden, Gehirnfick, Tot", "Dir wachsen manchmal Schamlippen.", "Erhöhte Toleranz des Hakenkreuzes", "Wenn du zuviel trinkst verreckst du", "weed16x16.png"),
    new drug("Cannabis", 4, 1, 1, "illegal", "Tetrahydrocannabinol (THC)", "Die Wirkung von Cannabis ist geilo matiko. Wenn du genug rauchst fliegst du über den Boden.", "Zu viel Sex-Appeal", "---", "---", "Kauft es in meinem MERCH!", "/path/to/image.png"));

singleDrug.clear();
singleDrug.add(drugList.where(function(e) {
    return e.name == "Alkohol";
}));
console.log(singleDrug.name);

So my problem is, the singleDrug.name is always null.

Thank you for helping

In JS you get the value of an Observable with .value. So

singleDrug.value.name

should do the work.

Greetings from Germany :wink:

Qujja wrote:

singleDrug.value.name

Its still null…

I modified your code a little bit and changed the output:

<App>
    <JavaScript>
        var Observable = require("FuseJS/Observable");

        var drugList      = Observable();
        var singleDrug    = Observable();
        var drugListError = Observable("");

        function drug(name, staerke, gefahrs, gefahra, legal, wirkstoffe, wirkung, risiken, wechselwirkung, kreuztoleranz, anmerkung, imageurl) {
            this.name           = name;
            this.staerke        = staerke;
            this.gefahr_selbst  = gefahrs;
            this.gefahr_andere  = gefahra;
            this.legalitaet     = legal;
            this.wirkstoffe     = wirkstoffe;
            this.wirkung        = wirkung;
            this.risiken        = risiken;
            this.wechselwirkung = wechselwirkung;
            this.kreuztoleranz  = kreuztoleranz;
            this.anmerkung      = anmerkung;
            this.imageurl       = imageurl;
        }

        drugList.add(new drug("Alkohol", 4, 8, 5, "legal", "alkohol", "Die Wirkung von Alkohol ist schon ganz nice. Wobei die Selbstkontrolle, mir persönlich etwas unsicherheit gibt und ich daher lieber zu anderen Drogen greife wie zum Beispiel Cannabis.", "Leberschäden, Gehirnfick, Tot", "Dir wachsen manchmal Schamlippen.", "Erhöhte Toleranz des Hakenkreuzes", "Wenn du zuviel trinkst verreckst du", "weed16x16.png"));
        drugList.add(new drug("Cannabis", 4, 1, 1, "illegal", "Tetrahydrocannabinol (THC)", "Die Wirkung von Cannabis ist geilo matiko. Wenn du genug rauchst fliegst du über den Boden.", "Zu viel Sex-Appeal", "---", "---", "Kauft es in meinem MERCH!", "/path/to/image.png"));

        singleDrug = drugList.where(function(e) {
            return e.name === "Alkohol";
        });

        module.exports = {
            singleDrug: singleDrug
        }
    </JavaScript>

    <Text Value="{singleDrug.name}"/>
</App>

I guess the Problem was that this code isnt synced. So it runs your console output before there is anything in your Observable. This example has an output as it should be. (so the .where() function works)

Yes, you have to make sure the observable is consumed by the UI, as described here

EDIT:

Yes it’s working! I’ll post the code tomorrow.