Ember tooltip pass variable












-2















I am building an Ember tooltip module to create dynamic content on hover.



<div class="custom-tool-wrapper">
{{#custom-tool-tipster
side="right"
content=(or getContent question.id)
contentAsHTML=true
class="tool-tipster-field"}}
Preview
{{/custom-tool-tipster}}
</div>


in the ember controller - the function doesn't return the variable "question.id" --- it comes back as 0 always - when it should be a string "q-1"



export default Ember.Component.extend({

getContent(tips){
console.log("tips1")
console.log("question", tips);
},

});









share|improve this question




















  • 1





    what are you expecting (or getContent question.id) to do? It's also very unclear from your question what it is your asking.

    – mistahenry
    Nov 13 '18 at 14:48













  • to pass question.id into getContent

    – The Old County
    Nov 13 '18 at 15:47
















-2















I am building an Ember tooltip module to create dynamic content on hover.



<div class="custom-tool-wrapper">
{{#custom-tool-tipster
side="right"
content=(or getContent question.id)
contentAsHTML=true
class="tool-tipster-field"}}
Preview
{{/custom-tool-tipster}}
</div>


in the ember controller - the function doesn't return the variable "question.id" --- it comes back as 0 always - when it should be a string "q-1"



export default Ember.Component.extend({

getContent(tips){
console.log("tips1")
console.log("question", tips);
},

});









share|improve this question




















  • 1





    what are you expecting (or getContent question.id) to do? It's also very unclear from your question what it is your asking.

    – mistahenry
    Nov 13 '18 at 14:48













  • to pass question.id into getContent

    – The Old County
    Nov 13 '18 at 15:47














-2












-2








-2








I am building an Ember tooltip module to create dynamic content on hover.



<div class="custom-tool-wrapper">
{{#custom-tool-tipster
side="right"
content=(or getContent question.id)
contentAsHTML=true
class="tool-tipster-field"}}
Preview
{{/custom-tool-tipster}}
</div>


in the ember controller - the function doesn't return the variable "question.id" --- it comes back as 0 always - when it should be a string "q-1"



export default Ember.Component.extend({

getContent(tips){
console.log("tips1")
console.log("question", tips);
},

});









share|improve this question
















I am building an Ember tooltip module to create dynamic content on hover.



<div class="custom-tool-wrapper">
{{#custom-tool-tipster
side="right"
content=(or getContent question.id)
contentAsHTML=true
class="tool-tipster-field"}}
Preview
{{/custom-tool-tipster}}
</div>


in the ember controller - the function doesn't return the variable "question.id" --- it comes back as 0 always - when it should be a string "q-1"



export default Ember.Component.extend({

getContent(tips){
console.log("tips1")
console.log("question", tips);
},

});






ember.js






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 13 '18 at 14:47









mistahenry

5,60931829




5,60931829










asked Nov 13 '18 at 13:39









The Old CountyThe Old County

6811857




6811857








  • 1





    what are you expecting (or getContent question.id) to do? It's also very unclear from your question what it is your asking.

    – mistahenry
    Nov 13 '18 at 14:48













  • to pass question.id into getContent

    – The Old County
    Nov 13 '18 at 15:47














  • 1





    what are you expecting (or getContent question.id) to do? It's also very unclear from your question what it is your asking.

    – mistahenry
    Nov 13 '18 at 14:48













  • to pass question.id into getContent

    – The Old County
    Nov 13 '18 at 15:47








1




1





what are you expecting (or getContent question.id) to do? It's also very unclear from your question what it is your asking.

– mistahenry
Nov 13 '18 at 14:48







what are you expecting (or getContent question.id) to do? It's also very unclear from your question what it is your asking.

– mistahenry
Nov 13 '18 at 14:48















to pass question.id into getContent

– The Old County
Nov 13 '18 at 15:47





to pass question.id into getContent

– The Old County
Nov 13 '18 at 15:47












1 Answer
1






active

oldest

votes


















1














I think what you're actually trying to achieve is best done via computed property on the question model object (your question is still really vague).



content: computed('id', function(){
//this.tips is a part of the model object
//compute and return whatever the content is
return "content";
}


and then just say:



{{#custom-tool-tipster
side="right"
content=model.content
contentAsHTML=true
class="tool-tipster-field"}}
Preview
{{/custom-tool-tipster}}


If you needed to actually invoke a function (which it's rare to think of an instance where the computed property isn't a better solution whenever state is involved), you would use a custom handlebars helper.



(or a b) is (a || b) and isn't function invocation like you're attempting if you're using the ember truth helpers lib for the or helper. It looks like you're trying to accomplish what ember-invoke allows



import Ember from 'ember';
import { helper } from '@ember/component/helper';

export function invokeFunction([context, method, ...rest]) {
if (typeof context[method] !== 'function') {
throw new Error(`Method '${method}' is not defined or cannot be invoked.`);
}

return Ember.get(context,method).apply(context, rest);
}

export default helper(invokeFunction);


which can be used like content=(invoke this "getContent" question.id) to invoke and return the value of a function on the passed in context object (the controller if this in the case of a route's template). Let me be clear, I think this invoke approach is a terrible idea and really gets rid of your separation of concerns and I'm not advocating that you do it. Templates shouldn't contain your logic and definitely shouldn't be calling arbitrary functions on the controller when you have such a nice facility like computed properties.






share|improve this answer























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53282314%2fember-tooltip-pass-variable%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    1














    I think what you're actually trying to achieve is best done via computed property on the question model object (your question is still really vague).



    content: computed('id', function(){
    //this.tips is a part of the model object
    //compute and return whatever the content is
    return "content";
    }


    and then just say:



    {{#custom-tool-tipster
    side="right"
    content=model.content
    contentAsHTML=true
    class="tool-tipster-field"}}
    Preview
    {{/custom-tool-tipster}}


    If you needed to actually invoke a function (which it's rare to think of an instance where the computed property isn't a better solution whenever state is involved), you would use a custom handlebars helper.



    (or a b) is (a || b) and isn't function invocation like you're attempting if you're using the ember truth helpers lib for the or helper. It looks like you're trying to accomplish what ember-invoke allows



    import Ember from 'ember';
    import { helper } from '@ember/component/helper';

    export function invokeFunction([context, method, ...rest]) {
    if (typeof context[method] !== 'function') {
    throw new Error(`Method '${method}' is not defined or cannot be invoked.`);
    }

    return Ember.get(context,method).apply(context, rest);
    }

    export default helper(invokeFunction);


    which can be used like content=(invoke this "getContent" question.id) to invoke and return the value of a function on the passed in context object (the controller if this in the case of a route's template). Let me be clear, I think this invoke approach is a terrible idea and really gets rid of your separation of concerns and I'm not advocating that you do it. Templates shouldn't contain your logic and definitely shouldn't be calling arbitrary functions on the controller when you have such a nice facility like computed properties.






    share|improve this answer




























      1














      I think what you're actually trying to achieve is best done via computed property on the question model object (your question is still really vague).



      content: computed('id', function(){
      //this.tips is a part of the model object
      //compute and return whatever the content is
      return "content";
      }


      and then just say:



      {{#custom-tool-tipster
      side="right"
      content=model.content
      contentAsHTML=true
      class="tool-tipster-field"}}
      Preview
      {{/custom-tool-tipster}}


      If you needed to actually invoke a function (which it's rare to think of an instance where the computed property isn't a better solution whenever state is involved), you would use a custom handlebars helper.



      (or a b) is (a || b) and isn't function invocation like you're attempting if you're using the ember truth helpers lib for the or helper. It looks like you're trying to accomplish what ember-invoke allows



      import Ember from 'ember';
      import { helper } from '@ember/component/helper';

      export function invokeFunction([context, method, ...rest]) {
      if (typeof context[method] !== 'function') {
      throw new Error(`Method '${method}' is not defined or cannot be invoked.`);
      }

      return Ember.get(context,method).apply(context, rest);
      }

      export default helper(invokeFunction);


      which can be used like content=(invoke this "getContent" question.id) to invoke and return the value of a function on the passed in context object (the controller if this in the case of a route's template). Let me be clear, I think this invoke approach is a terrible idea and really gets rid of your separation of concerns and I'm not advocating that you do it. Templates shouldn't contain your logic and definitely shouldn't be calling arbitrary functions on the controller when you have such a nice facility like computed properties.






      share|improve this answer


























        1












        1








        1







        I think what you're actually trying to achieve is best done via computed property on the question model object (your question is still really vague).



        content: computed('id', function(){
        //this.tips is a part of the model object
        //compute and return whatever the content is
        return "content";
        }


        and then just say:



        {{#custom-tool-tipster
        side="right"
        content=model.content
        contentAsHTML=true
        class="tool-tipster-field"}}
        Preview
        {{/custom-tool-tipster}}


        If you needed to actually invoke a function (which it's rare to think of an instance where the computed property isn't a better solution whenever state is involved), you would use a custom handlebars helper.



        (or a b) is (a || b) and isn't function invocation like you're attempting if you're using the ember truth helpers lib for the or helper. It looks like you're trying to accomplish what ember-invoke allows



        import Ember from 'ember';
        import { helper } from '@ember/component/helper';

        export function invokeFunction([context, method, ...rest]) {
        if (typeof context[method] !== 'function') {
        throw new Error(`Method '${method}' is not defined or cannot be invoked.`);
        }

        return Ember.get(context,method).apply(context, rest);
        }

        export default helper(invokeFunction);


        which can be used like content=(invoke this "getContent" question.id) to invoke and return the value of a function on the passed in context object (the controller if this in the case of a route's template). Let me be clear, I think this invoke approach is a terrible idea and really gets rid of your separation of concerns and I'm not advocating that you do it. Templates shouldn't contain your logic and definitely shouldn't be calling arbitrary functions on the controller when you have such a nice facility like computed properties.






        share|improve this answer













        I think what you're actually trying to achieve is best done via computed property on the question model object (your question is still really vague).



        content: computed('id', function(){
        //this.tips is a part of the model object
        //compute and return whatever the content is
        return "content";
        }


        and then just say:



        {{#custom-tool-tipster
        side="right"
        content=model.content
        contentAsHTML=true
        class="tool-tipster-field"}}
        Preview
        {{/custom-tool-tipster}}


        If you needed to actually invoke a function (which it's rare to think of an instance where the computed property isn't a better solution whenever state is involved), you would use a custom handlebars helper.



        (or a b) is (a || b) and isn't function invocation like you're attempting if you're using the ember truth helpers lib for the or helper. It looks like you're trying to accomplish what ember-invoke allows



        import Ember from 'ember';
        import { helper } from '@ember/component/helper';

        export function invokeFunction([context, method, ...rest]) {
        if (typeof context[method] !== 'function') {
        throw new Error(`Method '${method}' is not defined or cannot be invoked.`);
        }

        return Ember.get(context,method).apply(context, rest);
        }

        export default helper(invokeFunction);


        which can be used like content=(invoke this "getContent" question.id) to invoke and return the value of a function on the passed in context object (the controller if this in the case of a route's template). Let me be clear, I think this invoke approach is a terrible idea and really gets rid of your separation of concerns and I'm not advocating that you do it. Templates shouldn't contain your logic and definitely shouldn't be calling arbitrary functions on the controller when you have such a nice facility like computed properties.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 13 '18 at 17:07









        mistahenrymistahenry

        5,60931829




        5,60931829






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53282314%2fember-tooltip-pass-variable%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Florida Star v. B. J. F.

            Danny Elfman

            Lugert, Oklahoma