Метеор | Вспомогательная функция. Как распечатать значения атрибутов возвращаемого элемента на HTML - PullRequest
1 голос
/ 28 мая 2020

Я использую Meteor JS для разработки пользовательского интерфейса проекта. Существует вспомогательный метод, который принимает входной параметр и возвращает объект.

Вспомогательная функция:

"getPhoneName": function (param) {
        let myObj = PhoneRegister.findOne({"_id": param});
        //This myObj contains  name, _id, modelNumber
        return myObj;
    }

Как я использую его на HTML

<span>{{getPhoneName 'id_1234'}}</span> //This line is obviously prints the [[Object]]

    Here i am not getting solution how to print modelNumber. I have tried following :
1.{{getPhoneName 'id_1234'.modelNumber}}
2.{{getPhoneName 'id_1234'}}.modelNumber

Может кто поможет? Если вам нужна дополнительная информация, дайте мне знать.

Ответы [ 2 ]

3 голосов
/ 30 мая 2020

Вы упомянули, что у вас есть эта вспомогательная функция:

getPhoneName (_id) {
  const myObj = PhoneRegister.findOne({_id});
  //This myObj contains  name, _id, modelNumber
  return myObj;
}

Есть 2 способа go в зависимости от ваших потребностей


Во-первых, если вы хотите получить просто «имя» в качестве помощника подразумевает getPhoneName, вместо этого вы можете return myObj.name; (также следует учитывать обработку ошибок, чтобы убедиться, что myObj существует).

Затем вы можете просто использовать его:

<p>The name of the phone is {{getPhoneName phoneId}}</p>

Но, если вместо этого вы укажете различную информацию о телефоне в своем шаблоне, вы можете оставить помощника в покое и настроить свой шаблон одним из двух способов:

1) Используйте #let, чтобы назвать свой объект в шаблоне.

{{#let currentPhone=(getPhoneName phoneId)}}
  <ul>
    <li>ID: {{currentPhone._id}}</li>
    <li>Name: {{currentPhone.name}}</li>
  </ul>
{{/let}}

2) Используйте #with, чтобы использовать этот объект в качестве контекста данных без присвоения имя

{{#with getPhoneName phoneId}}
  <ul>
    <li>ID: {{_id}}</li>
    <li>Name: {{name}}</li>
  </ul>
{{/let}}
2 голосов
/ 28 мая 2020

Если вам нужно только одно свойство, вы можете просто return myObj.property; и отобразить его, как вы уже сделали с {{getPhoneName 'id_1234'}}.
Но если вы хотите получить доступ к нескольким свойствам, вы можете вернуть объект в массив, а затем используйте каждый или каждый встроенный блок Blaze, например:

Помощник:

"getPhoneName": function (param) {
        let myObj = PhoneRegister.findOne({"_id": param});
        //This myObj contains  name, _id, modelNumber
        return [myObj];  // Returning an array in order to use each or each-in
    }

HTML (с каждым):

{{#each getPhoneName 'id_1234'}}
    <span>{{this.property1}}</span>
    <span>{{this.property2}}</span>
{{/each}

Вы также можете взглянуть на {{# let}} , в некоторых случаях это тоже полезно.

...