Ember component - явное объявление параметров в компоненте

Используйте это:

// if the build platform of this app is x86 use C:\windows\sysnative
if(!Environment.Is64BitProcess) 
   System.Diagnostics.Process.Start("C:\\Windows\\sysnative\\SnippingTool.exe");
else
   System.Diagnostics.Process.Start("C:\\Windows\\system32\\SnippingTool.exe");

Проблема заключается в вашей платформе сборки (x86) и автоматическом переадресации папки C:\Windows\System32\ в 64-разрядных ОС.

В основном по нескольким причинам в 64-битной ОС Vista / Windows 7, когда 32-разрядное приложение пытается получить доступ к C:\Windows\System32\, оно автоматически перенаправляется в папку с именем C:\Windows\SysWOW64\. Следовательно, вы не можете запустить snippingtool.exe, потому что его нет в этой папке.

Единственный способ использовать C:\Windows\sysnative\ и обходить перенаправление.

2
задан kitimenpolku 17 January 2019 в 13:29
поделиться

2 ответа

Мне нравится использовать аддон ember-prop-types для этого случая использования. Это позволяет просматривать доступные свойства, типы каждого свойства, которое принимает компонент, а также устанавливать значения по умолчанию.

Вот небольшой пример того, что он может сделать:

import { Component } from '@ember/component';
import { PropTypes } from 'ember-prop-types';

export default Component.extend({
  // Defines the properties for the component
  propTypes: {
    // Must be a 'string'
    name: PropTypes.string,
    // Must be a 'number' and it's required
    age: PropTypes.number.isRequired,
    // Must be one of the values in the array
    favoriteColor: PropTypes.oneOf(['red', 'blue', 'green'])
  },

  // Defines the default values for the properties if not passed in
  getDefaultProps () {
    return {
      name: 'New User',
      age: 99
    }
  }
});
0
ответ дан Jason Barry 17 January 2019 в 13:29
поделиться

Я чувствую твою боль по этому поводу. Недавно была проделана работа по поддержке именованных аргументов для компонентов, которые помогли устранить неоднозначность передаваемых параметров из ряда других источников в шаблонах, объединенных в 3.1 . Вы можете увидеть RFC здесь для обоснования. См. Это сообщение в блоге для более подробного объяснения.

Короче говоря, вы можете получить доступ к переданным аргументам как: {{@arg}}, так что вы можете узнать в шаблоне, что это было передано компоненту.

Это помогает, но не завершено. Я обнаружил, что соглашение в понятном компоненте должно включать все аргументы в верхней части файла компонента с комментарием заголовка. Такой пример можно увидеть в ember-power-select (популярный аддон выбора):

  // Options
  searchEnabled: fallbackIfUndefined(true),
  matchTriggerWidth: fallbackIfUndefined(true),
  preventScroll: fallbackIfUndefined(false),
  matcher: fallbackIfUndefined(defaultMatcher),
  loadingMessage: fallbackIfUndefined('Loading options...'),
  noMatchesMessage: fallbackIfUndefined('No results found'),
  searchMessage: fallbackIfUndefined('Type to search'),
  closeOnSelect: fallbackIfUndefined(true),
  defaultHighlighted: fallbackIfUndefined(defaultHighlighted),
  typeAheadMatcher: fallbackIfUndefined(defaultTypeAheadMatcher),
  highlightOnHover: fallbackIfUndefined(true)
  .....

где fallbackIfUndefined - вычисляемый макрос:

import { computed } from '@ember/object';

export default function computedFallbackIfUndefined(fallback) {
  return computed({
    get() {
      return fallback;
    },
    set(_, v) {
      return v === undefined ? fallback : v;
    }
  });
}
[ 1113] Это хорошая конвенция для вашей команды.

В общем, я бы порекомендовал сначала определить, создан ли компонент в домашних условиях или является надстройкой, созданной сообществом. Если последнее, самые популярные из них предоставляют документацию и следуют хорошим соглашениям в своем исходном коде. Вы можете выяснить, находится ли он в доме, посмотрев в каталоге components для компонента (при условии, что это макет не в pods).

Если вы создали дом, вы более или менее на правильном пути. Если ваша команда пишет тесты, это должно быть отличным хранилищем возможностей компонента! Этот подход является секретным соусом для быстрого понимания проектов в разных областях IMO.

Но я не уверен, почему вам нужно понимать «все» варианты. Когда я использую компоненты, созданные другими членами команды, я регулярно выполняю поиск их использования в шаблонах и сравниваю этот конкретный пользовательский интерфейс / интерфейс (фактически просматривая браузер) с поведением, которое мне нужно реализовать. Вы должны копать только тогда, когда вам нужно поведение, отличное от существующего в приложении. Это может помочь вам лучше ознакомиться с продуктом, чтобы вы могли лучше узнать, что доступно:)

0
ответ дан mistahenry 17 January 2019 в 13:29
поделиться