第二天:创建一个View试试

ViewGroup中含有子View的时候,子View会执行OnDraw()方法一次或两次。 前言:今天,在写自定义View的时候让我发现了这样一个秘密。当ViewGroup中含有子View的时候,子View会执行OnDraw()方法一次或者两次。怎么那么不确切呢?没有那么多为什么,现象就是如此。有时候只绘制一次,有时候绘制两次。我觉得算是源码的一个bug吧。不信的可以亲自试试。例子1.自定义View代码:package com.dx.demi.view;import android.con 阅读详情

作者:梁祺 (eclipsesbs@gmail.com)

来自:http://www.benisoft.net/day2/index.html

今天,我们看怎样创建一个View。在Eclipse里,用户通过View和Editor协同工作来完成任务。Editor提供界面以完成任务的主要部分,以Eclipse提供的JDT(Java Development Tool)为例,用户使用JDT来开发Java应用程序,所以很大一部分工作都是围绕编辑Java源程序,那么编辑工作就应该放在Editor里完成,也就是Java Editor,JDT的其他View为Java应用程序的开发提供辅助,比如显示正在编辑的Java源程序所有的成员变量和方法。

首先来创建一个Plug-in项目,输入项目名”eclipse.tutorial.day2“。

输入Plug-in的ID,"eclipse.tutorial.day2"。

这次我们仍然选用Eclipse提供的例子模版,“Plug-in with a view”。这个模版会生成一个名叫Sample View的View,包括右键快捷菜单,View工具栏,鼠标双击,排序以及过滤。这个模版扩展了3个扩展点,我们会在后面一一介绍它们。

接下来是提供模版需要的信息。

  • Java Package Name:Sample View所在的Java包名。
  • View Class Name:Sample View的Java实现类名,就用缺省的SampleView。
  • View Name:View的名字,“Sample View”。
  • View Category ID:View类别的ID,Eclipse将属于同一个类别的View放在一起,便于用户通过“Window/Show View/Others”查找某个View。
  • View Category Name:View类别名。
  • Select the viewer type:选择表格控件Table Viewer,我们明天会尝试Tree Viewer。

点击“Finish”按钮。

启动Eclipse,选择“Window/Show View/Other”。

在Show View对话框中找到Sample Category和Sample View。点击“Next”按钮。

我们在前面为Sample View选择了表格控件Table Viewer,这个表格有3行内容。

Sample View的表格能够接受鼠标双击事件,选择一行用鼠标双击,Sample View就会做出响应,弹出对话框。

Sample View实现了两个View工具栏按钮,点击右上角的工具栏按钮,Sample View弹出对话框“Action 1 executed”。

下面我们来看一下代码。在Package Explorer View里找到plug-in.xml双击,Plug-in Editor的Extensions子页显示这个Plug-in实现了3个扩展点。

首先是扩展点“org.eclipse.ui.views”,它是创建View所必须扩展的扩展点。“Sample Category”定义了一个View的类别,ID为“eclipse.tutorial.day2”,名字为“Sample Category”。parentCategory留空。通过parentCategory,我们可以将新的View类别设置为另一个View类别的子类,从而形成一个树状结构。

“Sample View”定义了一个View,ID为“eclipse.tutorial.day2.views.SampleView”,名字为“Sample View”,模版为我们生成的Java类为“eclipse.tutorial.day2.views.SampleView”,category为前面定义的“eclipse.tutorial.day2”,还有图标。将鼠标移到class上,我们可以看到View的Java类必须实现IViewPart接口。接下来我们看一下代码。

点击class,打开eclipse.tutorial.day2.views.SampleView。它继承自ViewPart,一般情况View都是继承自这个虚类,这个虚类实现了IViewPart接口。Sample View的ID作为常量定义在最前面,这是一个值得推荐的做法。接下来定义了一个表格控件TableViewer的变量viewer,以及三个Action变量。

public class SampleView  extends ViewPart {

     /**
     * The ID of the view as specified by the extension.
     */

     public static final String ID = \ "eclipse.tutorial.day2.views.SampleView\";

     private TableViewer viewer;
     private Action action1;
     private Action action2;
     private Action doubleClickAction;

TableViewer来自于Eclipse提供的JFace,它是对Eclipse的原生窗口控件库SWT的基于MVC(Model,View,和Controller)封装,目的是为了避免在代码里将对窗口对象的操作代码和数据处理逻辑的代码混杂在一起,通过MVC模式,将两者隔离开,便于理解和维护。这里,TableViewer就充当MVC Controller的角色,MVC View是它所封装的SWT窗口对象,MVC Model就是下面这个类ViewContentProvider。

TableViewer必须要求一个实现IStructuredContentProvider接口的类提供表格显示所需要的Java对象,所以称为ContentProvider。我们这里看到的是最简单的实现,就是在getElements()直接返回所需要显示的对象数组,数组的一个元素就是表格里的一行。这个例子的表格只有一列,一行内容就是一个字符串。如果表格内容复杂,有很多列的话,就需要一个较复杂的数据对象来表示一行。

     /*
     * The content provider class is responsible for
     * providing objects to the view. It can wrap
     * existing objects in adapters or simply return
     * objects as-is. These objects may be sensitive
     * to the current input of the view, or ignore
     * it and always show the same content 
     * (like Task List, for example).
     */

     class ViewContentProvider  implements IStructuredContentProvider {
         public void inputChanged(Viewer v, Object oldInput, Object newInput) {
        }
         public void dispose() {
        }
         public Object[] getElements(Object parent) {
             return new String[] { \ "One\", \ "Two\", \ "Three\" };
        }
    }

接下面的内部类ViewLabelProvider是告诉TableViewer如何显示一行的数据。它必须实现ITableLabelProvider接口,一般我们会继承LabelProvider,让它提供一些缺省实现,这样代码可以简洁一些。

     class ViewLabelProvider  extends LabelProvider  implements ITableLabelProvider {
         public String getColumnText(Object obj,  int index) {
             return getText(obj);
        }
         public Image getColumnImage(Object obj,  int index) {
             return getImage(obj);
        }
         public Image getImage(Object obj) {
             return PlatformUI.getWorkbench().
                    getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT);
        }
    }

下一个内部类是NameSorter,这个类非常简单,除了继承ViewerSorter,什么也没有做。实际上,ViewerSorter包含一个文本比较器,所以我们删除NameSorter这个类,直接用ViewerSorter也行。

     class NameSorter  extends ViewerSorter {
    }

接着是SampleView的构造函数,这里本人曾经出过问题,创建的View在运行时怎么也找不到,检查了很多地方,发现View没有实例化出来,最后才发现缺省构造函数不知道什么时候被加一个参数,这样缺省构造函数就没了。原因是Eclipse检查到Plug-in实现”org.eclipse.ui.views”这个扩展点后,它需要用反射实例化View对象的,所以必须为它保留一个无参数的构造函数。

     class NameSorter  extends ViewerSorter {
    }

View的所有窗口控件的布局都必须在createPartControl()里完成,控件的布局我们会在以后讲到。这里简单说一下这个例子是怎么做的。createPartControl()接受参数parent,它是Eclipse为我们准备的摆放控件的容器,所以它的类型是Composite,TableViewer直接放在parent这个容器里,所以TableViewer构造函数第一个参数必须输入它的父控件(也就是它的容器),构造函数的第二个参数是TableViewer的风格,这里分别是允许多行选中(SWT.MULTI),水平滚动条(SWT.H_SCROLL),垂直滚动条(SWT.V_SCROLL)。接着是实例化它的ContentProvider,LableProvider,和Sorter。最后这个viewer.setInput(getViewSite())可能有点令人费解,设置TableViewer的输入为什么是View Site呢?其实你在这里除了null设任何东西都可以,这和ContentProvider的实现有关,我们稍后介绍。接下来几个方法就直观一些了,先给TableViewer关联一个联机帮助的ID,“eclipse.tutorial.day2.viewer”。然后是makeActions()创建Action对象,接着hookContextMenu()创建右键菜单,hookDoubleClickAction()截获并处理TableViewer的双击事件,最后contributeToActionBars()把Action添加到View的下拉菜单和工具栏上。

     /**
     * This is a callback that will allow us
     * to create the viewer and initialize it.
     */

     public void createPartControl(Composite parent) {
        viewer =  new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
        viewer.setContentProvider( new ViewContentProvider());
        viewer.setLabelProvider( new ViewLabelProvider());
        viewer.setSorter( new NameSorter());
        viewer.setInput(getViewSite());

         // Create the help context id for the viewer's control
        PlatformUI.getWorkbench().getHelpSystem().setHelp(viewer.getControl(), 
             "eclipse.tutorial.day2.viewer");
        makeActions();
        hookContextMenu();
        hookDoubleClickAction();
        contributeToActionBars();
    }

我们前面提到,这个例子的ViewContentProvider的实现是最简单的做法,它完全忽略input,所以它的inputChanged()的实现是空的。通常的做法是将表格需要显示的对象通过viewer.setInput()交给TableViewer,TableViewer通知ContentProvider的inputChanged()方法,新的输入对象就是newInput参数,ContentProvider保存newInput的引用,在显示时,ContentProvider通过getElements()方法从newInput中获取对应到每一行的对象集合,返回给TableViewer显示。这个例子在getElements()里直接写死需要返回的对象数组,所以input在这里就没有意义了,任何对象都可以使getElements()返回写死的对象数组。

第二个实现的扩展点是“org.eclipse.ui.perspectiveExtensions”。通过这个扩展点,我们将Sample View添加到Java Perspective。Perspective将任务相关的Editor和View关联起来,用户切换Perspective将当前的View隐藏起来,显示新任务相关的View。仍然以Java Perspective举例,Java Perspective由Outline View显示当前Java Editor显示的Java源程序结构,比如成员变量,内部类,成员方法等等,Javadoc View显示Java源程序中光标所在的成员变量或方法的Javadoc,等等。Plug-in Development Perspective用于Plug-in的配置,它也有Outline View显示plug-in.xml的结构,显示扩展点等等。但它没有Javadoc View,因为Javadoc View提供的功能和Plug-in的配置无关。在这个例子里,我们假设Sample View对Java Perspective是有用的。首先加一个perspectiveExtension,目标Java Perspective的ID是“org.eclipse.jdt.ui.JavaPerspective”。为了给Java Perspective添加一个View,需要在perspectiveExtension下添加view,ID输入Sample View的ID,“eclipse.tutorial.day2.views.SampleView”,位置在Problem View的右侧。

最后实现的扩展点是“org.eclipse.help.contexts”,它和上下文帮助有关。所谓上下文帮助就是允许用户通过F1键获取焦点所在控件的帮助信息。这个例子为TableViewer建立一个上下文帮助,所以只要焦点在TableViewer上,按F1键就能获得TableViewer的帮助信息。首先定义contexts,指定一个XML文件,这个文件包含了上下文帮助的内容。如果该文件来自其他Plug-in,可以在plugin这栏里输入该Plug-in的ID。至于上下文帮助及其XML文件,我们留到后面和帮助一起介绍。

如果希望从一个现有的Plug-in项目中新建View,在Plug-in Editor的Extensions页,点击”Add“按钮,在对话框中输入”views“,找到扩展点”org.eclipse.ui.views“,并选中,我们就会看到刚刚介绍过的模板Sample View。一般都会使用Sample View来创建View的骨架,删除掉不需要的代码,这样会简单一点。

到这里,我们了解了怎么创建一个View,怎么创建TableViewer,使用Content Provider和Label Provider在表格里显示数据,以及怎么将View通过Perspective扩展点将View关联到其他Perspective。

手把手带你画一个漂亮蜂窝view Android自定义view 上一篇做了一个水波纹view  不知道大家有没有动手试试呢点击打开链接 这个效果做起来好像没什么意义,如果不加监听回调 图片就能直接替代。写这篇博客的目的是锻炼一下思维能力,以更好的面多各种自定义view需求。 转载请注明出处:http://blog.csdn.net/wingichoy/article/details/50554058 本文是和代码同步写的。也就是说 阅读详情

相关推荐

UniApp 入门1:创建一个空白 Vue2 项目

pages/- 页面文件夹,所有页面放这里。static/- 静态资源,图片、字体等静态文件放这里。App.vue- 根组件,管理应用的整体结构。main.js- 主入口文件,初始化应用。- 项目配置文件,定义应用名字、权限等。pages.json- 路由导航,管理页面跳转和标题。希望这个简单的目录解析能让你快速上手 UniApp!🎉下一步要做什么?👉 运行项目,修改首页内容,让页面活起来吧!💻别忘了多试试 UniApp 的特色功能,比如一键发布多端。😆🎊。

m0_74331272的博客 1435

插件开发为Java透视图贡献新建向导时的一个bug(org.eclipse.ui.perspectiveExtensions)

有前同事问到,想在新建向导中添加一个右键菜单,可能是这样:     这种需求通过org.eclipse.ui.perspectiveExtensions扩展点就能办到。eg: step1:实现org.eclipse.ui.newWizards向导 <extension point="org.eclipse.ui.newWizards"> <cate

cuseronline的专栏 1506

微信小程序(10)——利用scroll-view实现横向滚动

这两天想做个小程序上线试试,小程序里需要用到横向滚动,却在做的过程中发现scroll-view即使加了scroll-x,也没有实现横向滚动的效果,于是查找了一下解决方案,解决方案如下: ▍解决方案 1、在scroll-view标签上加上样式属性:display: flex; white-space:nowrap; 2、scroll-view标签下的一级栏目标签需要加上样式属性:dis...

蜗牛先生 1万+

让你的视图(ViewPart)支持Show In请求(2)

本篇博文接上一篇(让你的视图(ViewPart)支持Show In请求(1))。 本篇要描述的内容为:当你自己的视图(或编辑器)激活时,显示相应的目标Show In目标视图并为即将show in的目标视图提供数据支持。 1.实现org.eclipse.ui.part.IShowInSource接口,并实现public ShowInContext getShowInContext();方法。

cuseronline的专栏 841

这种方式教你简单的在Flutter中分离View与Model的方法

问题 我们在做Flutter开发的时候主要会在State中加入很多自己的业务逻辑,例如网络请求,数据处理等等,如果你的业务逻辑比较复杂的话会面对着一个越来越膨胀的State。代码的可读性下降,日后维护也越来越困难。这和我们在开发Android的时候遇到巨无霸Activity是同样的问题。解决办法就是分层解耦。Android从MVC进化到MVP/MVVM。Flutter 也有开发者把MVP引入到Flutter来解决这个问题。这里我们来看另一种比较简单的方法。 方法 我们先来看一下官方的那个原始的Coun

十年代码写十年 1161

如何创建 SAP ABAP CDS View 的 Association

所以本文我们虽然学习了如何创建 SAP CDS View 的 association,知道了 association 是用来在 CDS View 里将两张数据库表关联起来,但根本不知道怎么使用这个 association. 而且从 association 的写法来看,似乎和本教程之前介绍 inner join,left join 这些数据库表的连接操作没什么区别,都是根据两张表的 carrid 和 connid 字段相同进行的连接。只看到了我们在 CDS View 源代码实现里,放出来的四个字段。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 904

Plug-in org.eclipse.jdt.ui was unable to load class

本文转自:http://www.pcming.com/Studio/html/07/n-807.html Eclipse 在使用的时候忽然报错 out of memery 。 重启动后什么都没有了,仅有几个file,edit之类的以及菜单,主窗口什么都没有,二级菜单几乎都是灰色。 点windows菜单,首选项打开后进入java则报错。org.eclipse.jdt.ui.Ja

chenxiaofeng_的专栏 2178

Mamba-YOLO实战:环境配置+模型训练+精度调优全流程指南(附Colab代码)

在目标检测领域,一场由状态空间模型引发的技术革新正在悄然改写行业格局。近期国际顶级学术期刊连续发布的YOLOv5_mamba、FER-YOLO等突破性成果,不仅刷新了检测精度记录,更开创了结构化状态空间模型(SSM)与经典检测框架的创新融合范式。当前该领域涌现的十大标杆性研究,已在以下维度取得突破性进展:√ 遮挡目标识别准确率提升38%√ 小样本场景泛化能力增强2.7倍√ 视频流检测延迟降低至17ms√ 多目标交叉干扰抑制效果达SOTA。

2501_90555291的博客 1581

解决org.eclipse.jdt.ui报错

不知道从哪天起,eclipse alt+/ 提示总报错陆续按网上教程搞过几次都没成功。这次下定狠心花时间来解决,反而出现新的问题,即新建class类,按finish无反应。 还好不停的折腾,终于解决了。 关于网上常见代码提示报错的解决方法有(以下我都无效): 报错内容: The 'org.eclipse.jdt.ui.JavaAllCompletionProposalCompute

hutengfei0701的专栏 2万+

基于深度学习的干扰识别

本文是记录我上半年仿真和复现干扰识别的过程,展示的主要是一些需要注意的点以及仿真的相关结果。

qq_55218335的博客 1702

mcgs数据导出到U盘

mcgs触摸屏在工业中应用还是很多的,尤其他的脚本功能策略功能等将开放性放到了最大,让用户可以根据实际需求进行自由创作,正因为这样,对一些初学者就不是很友好,初学者想要简单操作就能实现功能,但是mcgs不可能两者兼备,在做工业设备,一些数据的采集保存就比较常见,但是mcgs没有相关按钮能够直接实现将数据导出到U盘的功能。这里我给大家讲解关于mcgs将报警历史记录、日志记录、历史数据记录导出到U盘的方法。

qq_24866535的博客 6233

eclipse的VIEW的自定义方法

      有时为了快速创建一些JAVA或者ANDROID类型的文件,可以使用eclipse自带的快捷new功能,但是有时我们不小心设置到了隐藏这些快捷创建,那么在new下将不会显示这些快捷方法,此时我们可以通过以下设置来恢复:第一步第二步,把需要显示的打勾就行了...

FDGFGFDGFD的博客 832

告别手动点鼠标:用Python脚本批量跑ADS版图仿真,效率提升10倍(附完整代码)

本文详细介绍了如何利用Python脚本自动化ADS版图仿真流程,显著提升射频工程师的工作效率。通过调用ADS底层接口,实现参数化修改、批量任务调度和结果自动收集,解决了手动操作中的常见问题,如仿真不更新等。附完整代码,帮助开发者快速实现10倍效率提升。

weixin_42523543的博客 331

Android从入门到放弃——二、View(1、view的点击事件和背景)

今天我们要将的主题——View 什么是View 之前我们说Activity就是门面,那么View就是我们家里的家装了。我们所有能够看到的控件都是继承至View。Android提供了大量丰富的控件。 创建View 想要创建View的方法有2种,一种是在布局文件中间通过xml的方式,一种是在代码里面直接创建View对象。 下面我们先来看看第一种 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android

644

YOLO12涨点改进| 损失函数改进篇 |AAAI 2025| 一种小目标检测SDLoss损失函数,解决现有损失函数对不同目标尺度敏感度不足的局限,提高了网络检测不同尺度目标的敏感能力,助力高效涨点

本文提出了一种改进的小目标检测方法SDLoss,通过动态调整尺度损失与位置损失的权重,优化了YOLOv12模型的性能。针对红外小目标检测中存在的两个主要问题:1)标准卷积难以捕捉目标的高斯空间分布特性;2)现有损失函数对不同尺度目标的敏感度不足,研究团队开发了Pinwheel-shaped卷积(PConv)和Scale-based Dynamic损失函数(SDLoss)。PConv通过不对称卷积核设计显著提升感受野,SDLoss则根据目标大小动态平衡尺度与位置损失的影响。

Ai缝合怪、助力小伙伴高效发论文 238

【AI智能体】Dify 搭建发票识别助手操作实战详解

Dify 搭建发票识别专属助手操作实战详解

congge 5549

Android中继承View的研究(一) -- 一个小Demo

本文转自:http://lovewf.blog.51cto.com/1723922/723632 Android中继承View的研究(一) --一个小Demo   序:总想写下点东西出来,但是总是没有时间,不是业务忙就是又有新的研究项目,最近有点时间,写点以前一直想写有一直没写的东西,供大家参考,但是终归是一家之言,仅供参考。本人的每次讲解都会提供源代码下载,并且会最近会一直更新还...

dibe49481448的博客 112

【以太网硬件九】1000base-X是什么?

简要描述1000base-X物理层规范

highman110的博客 1万+

vue 路由的内置组件 router-view 详细介绍(有图有真相)

介绍 当你的地址符合我的路由要求的时候,会把路由的组件在 你的界面中呈现,而这个界面实在 App.vue里面 当你打开 App.vue就会在里面发现这两个组件 这两个是 vue 给你提供的两个 vue 内置组件 功能介绍 router-link 实现路由之间的跳转 router-view 当你的路由path 与访问的地址相符时,会将指定的组件替换该 router-view ...

北芒的博客 7万+

百度百科 X-Bk-Token 算法还原

百度百科 X-Bk-Token 算法还原

自成背后的博客 1万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

UniApp弹窗里列表滑不动?别再用view了,试试scroll-view这个属性

本文深入解析了UniApp弹窗内列表滚动失效的问题,并提供了使用scroll-view组件的解决方案。通过详细的技术分析和实战案例,帮助开发者理解移动端滚动机制、CSS上下文和组件层级的交互,从而有效解决弹窗滚动问题,提升用户体验。

weixin_33670786的博客 716

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

小程序组件之——cover-view与view与text

cover-view与view ok,介绍完了图片的两种组件,我们再来介绍两种组件。 cover-image和view这两个组件的作用是。。。都知道div吧?这个东西和div一毛一样,块级元素、独占一行、没啥含义,就是容器。 它们的区别就像是cover-image与image的区别一毛一样,就是cover-view会成为全场最靓的崽(始终在页面可视区域的最上面) 上代码! wxml <cover-view>博主最帅</cover-view> <view>博主最帅</

morty 3104

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Unity3D UGUI利用Scroll View实现滚动列表

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言第一步第二步第三步第四步第五步第六步第七步二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 第一步 新建Panel,在Panel下新建Scroll View 第二步 修改滚动列表尺寸 第三步 由于我需要的效果是横向滚

weixin_43598617的博客 1346

自定义View 实战一 - 轻松显示星级

需求 前面几篇文章主要都是在介绍一些自定义 View 的基础知识,本篇就来一起编写一个小 Demo,来感受感受。 自定义 View 的编写,来源于产品的无理需求,有了需求,首先是要看现有的控件能否满足需求,或者控件的组合能否满足,现有的控件满足的话,就不必去造一个轮子,费时费力。再有,考虑产品的开发周期和开发质量,周期允许,质量要求较高,那么需要考虑使用自定义 View,能够带来性能上的提升。还有...

u011371324的专栏 368

view类控件

1.Android自定义控件是通过继承View类实现的,新建一个View类的子类,然后重写ondraw方法,加入你创建的类名为(MyView),那么在Activity中SetContentview(MyView),就可以显示你自己定义的控件了。 但是如果你想将该控件能够和其他控

C_simple的专栏 639

Backbone笔记之一(View)

关于Backbone是什么,就不用我多介绍了,不知道的这货是什么的话请直接忽略本文吧。本文只是作为本人学习这货的一个笔记,顺大便给其他学习者参考一下。View首先从View部分开始,第一个程序注定是从hello world开始。在开始之前,先创建一个HTML文件,在其中引用这三个JS库(注意:underscore要在backbone前面):jquery.js underscore.js backb

猛禽的编程艺术 1万+
上一篇: 第一天:第一个Plug-in,Hello World
下一篇: 第三天:那么TreeViewer怎么实现?
std3lqi
博客等级 码龄24年 1粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值