Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #61 (permalink)  
Старый 08.10.2016, 19:37
Аватар для Lemme
Профессор
Отправить личное сообщение для Lemme Посмотреть профиль Найти все сообщения от Lemme
 
Регистрация: 15.07.2015
Сообщений: 511

nerv_, например так. Vue' thread 1
Ответить с цитированием
  #62 (permalink)  
Старый 12.10.2016, 09:11
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Lemme, делай так, как считаешь правильным Время тебя рассудит)
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #63 (permalink)  
Старый 21.10.2016, 08:04
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Почему разработчики GitLab используют Vue.js?
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 21.10.2016 в 08:11.
Ответить с цитированием
  #64 (permalink)  
Старый 21.10.2016, 17:24
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Я так понимаю что бы писать компоненты на es6 через классы, то нужно делать что то такое? (т.е юзать либу vue-class-component)

import Component from 'vue-class-component'

@Component({
  props: {
    propMessage: String
  },
  template: `
    <div>
      <input v-model="msg">
      <p>prop: {{propMessage}}</p>
      <p>msg: {{msg}}</p>
      <p>computed msg: {{computedMsg}}</p>
      <button @click="greet">Greet</button>
    </div>
  `
})
class App {
  // return initial data
  data () {
    return {
      msg: 123
    }
  }

  // lifecycle hook
  mounted () {
    this.greet()
  }

  // computed
  get computedMsg () {
    return 'computed ' + this.msg
  }

  // method
  greet () {
    alert('greeting: ' + this.msg)
  }
}
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #65 (permalink)  
Старый 21.10.2016, 17:56
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Cyber, как напишешь - таки будет) Я раньше по похожему делал, но хотелось нормального автокомплита, в итоге сделал так:

import iData from '../i-data/i-data';
import * as tpls from './b-button.ss';
import { PARENT } from '../i-block/i-block';
import { model } from '../../core/block';

@model(tpls)
export default class bButton extends iData {
	/**
	 * Button type
	 */
	type: string = 'button';

	/**
	 * Connected form id
	 */
	form: ?string;

	/**
	 * Input autofocus mode
	 */
	autofocus: ?boolean;

	/**
	 * Icon before text
	 */
	preIcon: ?string;

	/**
	 * Icon after text
	 */
	icon: ?string;

	/**
	 * Tooltip text
	 */
	hint: ?string;

	/**
	 * Tooltip position
	 */
	hintPos: ?string;

	/** @override */
	static mods = {
		rounding: [
			'none',
			['small'],
			'normal',
			'big'
		],

		theme: [
			PARENT,
			'dark',
			'light',
			'icon'
		]
	};

	/* @override */
	created() {
		this.initCloseHelpers();
	}
}


Декоратор матчит класс и генерит компонент, а инфа о типах пропсов берётся из Flow аннотаций.
__________________
kobezzza
code monkey
Ответить с цитированием
  #66 (permalink)  
Старый 22.10.2016, 07:10
Аватар для join
Профессор
Отправить личное сообщение для join Посмотреть профиль Найти все сообщения от join
 
Регистрация: 05.03.2012
Сообщений: 477

Гик изучает апи Vue 3.0 .
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>vue.js & dinamics.js | https://jsfiddle.net/yyx990803/y91wy85p/</title>
	
	<style>
	.draggable-header-view {
	  background: #fff url(http://thumbsnap.com/i/YopxPzbo.jpg?1021) no-repeat 0 0;
	  background-size: 100% auto;
	  width: 320px;
	  height: 427px;
	  overflow: hidden;
	  margin: 30px auto;
	  position: relative;
	  font-family: 'Roboto', Helvetica, Arial, sans-serif;
	  color: #fff;
	  font-size: 14px;
	  font-weight: 300;
	  box-shadow: 0 0 5px 1px rgb(178, 97, 44);
	  -webkit-user-select: none;
	  -moz-user-select: none;
	  -ms-user-select: none;
	  user-select: none;
	}
	.draggable-header-view .bg {
	  position: absolute;
	  top: 0;
	  left: 0;
	  z-index: 0;
	}
	.draggable-header-view .header,
	.draggable-header-view .content {
	  position: relative;
	  z-index: 1;
      padding: 0 10px;
	  box-sizing: border-box;
	}
	.draggable-header-view .header {
	  height: 160px;
	}
	.draggable-header-view .content {
	  color: #fff;
	  line-height: 24px;
	  position: absolute;
	  top:0;
	  left:0;
	  right:0;
	  opacity: 0.2;
	}
	.draggable-header-view .content p{
      font-size: 24px;
      margin: 0;
	  opacity: inherit;
	}
	.draggable-header-view .content p span{
	  font-size: inherit;
	}
	.draggable-header-view svg{
	    cursor: -webkit-grab;
	}
	.draggable-header-view svg:active,
	.draggable-header-view svg:focus{
	    cursor: -webkit-grabbing;
	}
	</style>
	
	<script src="https://unpkg.com/vue@latest/dist/vue.js"></script>
	<script src="https://unpkg.com/dynamics.js@1.1.5"></script>
  </head>
  <body>

<!-- template for the component -->
<script type="text/x-template" id="header-view-template">
  <div class="draggable-header-view"
    @mousedown="startDrag" @touchstart="startDrag"
    @mousemove="onDrag" @touchmove="onDrag"
    @mouseup="stopDrag" @touchend="stopDrag" @mouseleave="stopDrag">
    <svg class="bg" width="320" height="460">
	  <path :d="plusPathLeft" fill="#b2612c">Vue.js</path>
	  <path :d="plusPathRight" fill="#b2612c"></path>
    </svg>
    <div class="content" :style="contentPosition">
      <slot name="content"></slot>
    </div>
  </div>
</script>

<div id="app" @touchmove.prevent>
  <draggable-header-view>
    <template slot="content">
      <p>Api <span>V</span><span>u</span><span>e</span><span>.</span><span>j</span><span>s</span> v.3.0</p>
    </template>
  </draggable-header-view>
</div>

<script>
(function(window){
var xuy=110;
Vue.component('draggable-header-view', {
  template: '#header-view-template',
  data: function () {
    return {
      dragging: false,
      c: { x: xuy, y: xuy },
      start: { x: 0, y: 0 }
    }
  },
  computed: {
	plusPathLeft: function(){
	    return 'M'+this.c.x+' '+this.c.y+' h35 v35 h35 v35 h-35 v35 h-35 v-35 h-35 v-35 h35'
	},
	plusPathRight: function(){
	    return 'M'+(this.c.x + 143)+' '+(this.c.y - 60)+' h30 v30 h30 v30 h-30 v30 h-30 v-30 h-30 v-30 h30'
	},
    contentPosition: function () {
      var dy = this.c.y - xuy
      var dampen = dy > 0 ? 2 : 4
      return {
		opacity: (dy/dampen/20)
      }
    }
  },
  methods: {
    startDrag: function (e) {
      e = e.changedTouches ? e.changedTouches[0] : e
      this.dragging = true
      this.start.x = e.pageX
      this.start.y = e.pageY
    },
    onDrag: function (e) {
      e = e.changedTouches ? e.changedTouches[0] : e
      if (this.dragging) {
        this.c.x = xuy + (e.pageX - this.start.x)
        var dy = e.pageY - this.start.y
        var dampen = dy > 0 ? 1.5 : 4
        this.c.y = xuy + dy / dampen
      }
    },
    stopDrag: function () {
      if (this.dragging) {
        this.dragging = false
        dynamics.animate(this.c, {
          x: xuy,
          y: xuy
        }, {
          type: dynamics.spring,
          duration: 1234,
          frequency: 537,
          friction: 200,
          anticipationSize: 120
        })
      }
    }
  }
})

new Vue({ el: '#app' })
})(window);
</script>
  </body>
</html>

Последний раз редактировалось join, 22.10.2016 в 07:11. Причина: bouncing boobs
Ответить с цитированием
  #67 (permalink)  
Старый 22.10.2016, 15:12
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Сообщение от kobezzza
Декоратор матчит класс и генерит компонент
а можно по подробней, как он генирирует компонент?)
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #68 (permalink)  
Старый 22.10.2016, 21:55
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от cyber
Я так понимаю что бы писать компоненты на es6 через классы, то нужно делать что то такое? (т.е юзать либу vue-class-component)
Очень похоже на то. Меня тоже раньше на классах клинило , на самом деле они там по большому счету не нужны. Представить, что ты описываешь объект, а затем просто передаешь его в функцию --- Vue(descriptor). Иными словами, если ты инкапсулируешь в модули, то модуль будет возвращать descriptor, а не класс.
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 22.10.2016 в 21:57.
Ответить с цитированием
  #69 (permalink)  
Старый 23.10.2016, 13:12
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от cyber Посмотреть сообщение
а можно по подробней, как он генирирует компонент?)
Ну сперва на этапе трансляции я заменяю:

foo: String = '1';


На

@prop({type: String, default: '1'})
foo;


А дальше главный декоратор model, которым врапится компонент, создаёт экземпляр класса и на его основе делает Vue.component. Конструктор базового класса возвращает объект, где геттеры/сеттеры заменены на компьютеды, поля с декораторыми @prop и @field на props и data(). Методы вставляются в methods, а зарезирвированные слова типа mounted как есть. Также статики становятся свойствами $options Vue. В общем всё довольно просто и главное, что работает автокомплит и super. Еще я для сеттеров и геттеров генерю методы, например fooGetter, чтобы можно было вызывать их через super.
__________________
kobezzza
code monkey
Ответить с цитированием
  #70 (permalink)  
Старый 23.10.2016, 14:05
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

kobezzza, ты написал свой транслятор?
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
NW (node-webkit) thread nerv_ Node.JS 9 12.03.2015 13:59